diff options
Diffstat (limited to 'src/progman.c')
-rw-r--r-- | src/progman.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/progman.c b/src/progman.c index 4864531..8c33db8 100644 --- a/src/progman.c +++ b/src/progman.c @@ -432,7 +432,10 @@ open_redirector (struct prog *master, int stream) int prio; char *tag; fd_set fdset; - + + if (init_process) + return -1; + switch (master->v.p.comp->redir[stream].type) { case redir_null: @@ -1160,11 +1163,8 @@ prog_start (struct prog *prog) return; } - if (!init_process) - { - redir[RETR_OUT] = open_redirector (prog, RETR_OUT); - redir[RETR_ERR] = open_redirector (prog, RETR_ERR); - } + redir[RETR_OUT] = open_redirector (prog, RETR_OUT); + redir[RETR_ERR] = open_redirector (prog, RETR_ERR); switch (pid = fork ()) { @@ -1281,8 +1281,10 @@ prog_start (struct prog *prog) else if (is_sysvinit (prog->v.p.comp)) sysvinit_acct (SYSV_ACCT_PROC_START, "", prog->tag, pid, ""); - close (redir[RETR_OUT]); - close (redir[RETR_ERR]); + if (redir[RETR_OUT] != -1) + close (redir[RETR_OUT]); + if (redir[RETR_ERR]) + close (redir[RETR_ERR]); prog->pid = pid; prog->v.p.status = status_enabled; debug (1, (_("%s started, pid=%lu"), prog->tag, (unsigned long) pid)); |