From 0cbcb13c8752337c6f9b7c218e21adb8b32d7618 Mon Sep 17 00:00:00 2001
From: Guillem Jover <guillem@hadrons.org>
Date: Mon, 25 Mar 2013 12:28:58 +0100
Subject: [PATCH] main: Wait to daemonize to just before entering the main loop
Status: applied

To be able to get correct exit codes in case of error, we have to delay
the daemonization to just before entering the main loop. Otherwise the
init scripts might assume everything started fine and go ahead when that
was not the case.

The initialization error messages are printed to syslog instead of
stderr, which would need a rework in the future of either the logging
functions, or the call sites to distinguish what belongs where. But at
least for now we get correct exit values.
---
 src/main.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/main.c b/src/main.c
index a121f63..b9f94c5 100644
--- a/src/main.c
+++ b/src/main.c
@@ -172,13 +172,6 @@ int main(int argc, char *argv[])
 		exit(0);
 	}
 
-	if (option_detach == TRUE) {
-		if (daemon(0, 0)) {
-			perror("Can't start daemon");
-			exit(1);
-		}
-	}
-
 	main_loop = g_main_loop_new(NULL, FALSE);
 
 	dbus_error_init(&err);
@@ -218,6 +211,13 @@ int main(int argc, char *argv[])
 
 	__near_plugin_init(option_plugin, option_noplugin);
 
+	if (option_detach == TRUE) {
+		if (daemon(0, 0)) {
+			perror("Can't start daemon");
+			exit(1);
+		}
+	}
+
 	memset(&sa, 0, sizeof(sa));
 	sa.sa_handler = sig_term;
 	sigaction(SIGINT, &sa, NULL);
-- 
1.8.2.rc3

