diff options
Diffstat (limited to 'src/progman.c')
-rw-r--r-- | src/progman.c | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/src/progman.c b/src/progman.c index 3bbd8b3..4ca3824 100644 --- a/src/progman.c +++ b/src/progman.c @@ -116,12 +116,2 @@ progman_lookup_tcpmux (const char *service, const char *master) -struct prog * -prog_lookup_by_idx (unsigned idx) -{ - struct prog *prog; - for (prog = proghead; prog; prog = prog->next) - if (IS_COMPONENT (prog) && prog->v.p.idx == idx) - break; - return prog; -} - void prog_stop (struct prog *prog, int sig); @@ -307,3 +297,3 @@ register_command (char *tag, char *command, pid_t pid) int -progman_running_p () +progman_waiting_p () { @@ -313,6 +303,10 @@ progman_running_p () { - if (IS_COMPONENT (prog) && is_comp_wait (prog->v.p.comp) && - prog->pid > 0) + if (IS_COMPONENT (prog) && prog->v.p.wait && prog->pid > 0) + { + debug(1, ("%s: waiting for %s (%lu)", + __FUNCTION__, prog_tag (prog), + (unsigned long) prog->pid)); return 1; } + } return 0; @@ -1061,2 +1055,3 @@ prog_start (struct prog *prog) } + prog->v.p.wait = is_comp_wait (prog->v.p.comp); debug (1, ("ok to start %s", prog->v.p.comp->tag)); @@ -1503,2 +1498,6 @@ progman_start () + if (progman_waiting_p ()) + /* Noting to do if there are processes left in the previous runlevel */ + return; + recompute_alarm = 0; @@ -1548,2 +1547,6 @@ progman_wake_sleeping (int onalrm) + if (progman_waiting_p ()) + /* Noting to do if there are processes left in the previous runlevel */ + return; + debug (1, (_("managing sleeping/stopping components"))); @@ -2256,2 +2259,5 @@ progman_cleanup (int expect_term) int status; + + if (!expect_term) + expect_term = progman_waiting_p (); while ((pid = waitpid (-1, &status, WNOHANG)) > 0) @@ -2306,2 +2312,3 @@ progman_cleanup (int expect_term) prog->v.p.status = status_finished; + prog->v.p.wait = 0; } |