From 25cec2b896a977565ca04e5c649aab8c6e48bda8 Mon Sep 17 00:00:00 2001 From: Michael Tokarev Date: Thu, 30 Oct 2014 17:47:46 +0300 Subject: os-posix: reorder parent notification for -daemonize Put "success" parent reporting in os_setup_post() to after all other initializers which may also fail, to the very end, so more possible failure cases are reported properly to the calling process. Signed-off-by: Michael Tokarev Reviewed-by: Gonglei --- os-posix.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'os-posix.c') diff --git a/os-posix.c b/os-posix.c index 52e989797d..ba091f1530 100644 --- a/os-posix.c +++ b/os-posix.c @@ -255,15 +255,6 @@ void os_setup_post(void) int fd = 0; if (daemonize) { - uint8_t status = 0; - ssize_t len; - - do { - len = write(daemon_pipe, &status, 1); - } while (len < 0 && errno == EINTR); - if (len != 1) { - exit(1); - } if (chdir("/")) { perror("not able to chdir to /"); exit(1); @@ -278,11 +269,21 @@ void os_setup_post(void) change_process_uid(); if (daemonize) { + uint8_t status = 0; + ssize_t len; + dup2(fd, 0); dup2(fd, 1); dup2(fd, 2); close(fd); + + do { + len = write(daemon_pipe, &status, 1); + } while (len < 0 && errno == EINTR); + if (len != 1) { + exit(1); + } } } -- cgit v1.2.1