summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2008-07-28 23:24:25 +0200
committerLennart Poettering <lennart@poettering.net>2008-07-28 23:24:25 +0200
commit78d2b0944ba302f7c3026f0aea8dd450ebff8153 (patch)
tree2044a8d201ab7f16aedf276f1a9acc8c224345a3
parent50aba7c323215a210b1fd154b63f6f61d4aa165a (diff)
reorder a few things, so that logging works properly very early already
-rw-r--r--libdaemon/dfork.c29
1 files changed, 15 insertions, 14 deletions
diff --git a/libdaemon/dfork.c b/libdaemon/dfork.c
index be57c09..b0a99dc 100644
--- a/libdaemon/dfork.c
+++ b/libdaemon/dfork.c
@@ -183,16 +183,8 @@ pid_t daemon_fork(void) {
pid_t dpid;
/* First child */
-
- if (sigaction(SIGCHLD, &sa_old, NULL) < 0) {
- daemon_log(LOG_ERR, "close() failed: %s", strerror(errno));
- goto fail;
- }
-
- if (sigprocmask(SIG_SETMASK, &ss_old, NULL) < 0) {
- daemon_log(LOG_ERR, "sigprocmask() failed: %s", strerror(errno));
- goto fail;
- }
+ if (daemon_log_use & DAEMON_LOG_AUTO)
+ daemon_log_use = DAEMON_LOG_SYSLOG;
if (close(pipe_fds[0]) < 0) {
daemon_log(LOG_ERR, "close() failed: %s", strerror(errno));
@@ -223,10 +215,11 @@ pid_t daemon_fork(void) {
}
setsid();
+ setpgid(0, 0);
umask(0777);
if (chdir("/") < 0) {
- daemon_log(LOG_ERR, "umask() failed: %s", strerror(errno));
+ daemon_log(LOG_ERR, "chdir() failed: %s", strerror(errno));
goto fail;
}
@@ -238,6 +231,16 @@ pid_t daemon_fork(void) {
int tty_fd;
/* Second child */
+ if (sigaction(SIGCHLD, &sa_old, NULL) < 0) {
+ daemon_log(LOG_ERR, "close() failed: %s", strerror(errno));
+ goto fail;
+ }
+
+ if (sigprocmask(SIG_SETMASK, &ss_old, NULL) < 0) {
+ daemon_log(LOG_ERR, "sigprocmask() failed: %s", strerror(errno));
+ goto fail;
+ }
+
if (signal(SIGTTOU, SIG_IGN) == SIG_ERR) {
daemon_log(LOG_ERR, "signal(SIGTTOU, SIG_IGN) failed: %s", strerror(errno));
goto fail;
@@ -273,9 +276,6 @@ pid_t daemon_fork(void) {
goto fail;
}
- if (daemon_log_use & DAEMON_LOG_AUTO)
- daemon_log_use = DAEMON_LOG_SYSLOG;
-
return 0;
} else {
@@ -286,6 +286,7 @@ pid_t daemon_fork(void) {
fail:
dpid = (pid_t) -1;
+
if (atomic_write(pipe_fds[1], &dpid, sizeof(dpid)) != sizeof(dpid))
daemon_log(LOG_ERR, "Failed to write error PID: %s", strerror(errno));