aboutsummaryrefslogtreecommitdiff
path: root/src/progman.c
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2015-12-20 00:50:52 +0200
committerSergey Poznyakoff <gray@gnu.org>2015-12-20 00:59:25 +0200
commitd479bd2f63445524253e16d8575a0592c266908d (patch)
treeaae2188767328ee7dac100e14ad58ec75eeb35e5 /src/progman.c
parent84e4b3d5274c599ed30482bfe2ca8af080d936af (diff)
downloadpies-d479bd2f63445524253e16d8575a0592c266908d.tar.gz
pies-d479bd2f63445524253e16d8575a0592c266908d.tar.bz2
Bugfixes in init mode
* src/ctl.c (ctl_open): Add missing return. * src/pies.c (config_parse): Return if tree is null. (main) [INIT_EMU]: Print more info. Override default init_fifo. Don't use syslog and control socket if running as init process. * src/pies.h (init_fifo): New extern. * src/progman.c (open_redirector): Return -1 if running as init process. (prog_start): Always initialize redir[]. * src/sysvinit.c (init_fifo): New variable. Use it instead if the INIT_FIFO macro. (inittrans): Call create_fifo once, when transiting from boot to normal state.
Diffstat (limited to 'src/progman.c')
-rw-r--r--src/progman.c18
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));

Return to:

Send suggestions and report system problems to the System administrator.