aboutsummaryrefslogtreecommitdiff
path: root/src/progman.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/progman.c')
-rw-r--r--src/progman.c35
1 files changed, 21 insertions, 14 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,5 +303,9 @@ progman_running_p ()
{
- if (IS_COMPONENT (prog) && is_comp_wait (prog->v.p.comp) &&
- prog->pid > 0)
- return 1;
+ 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;
+ }
}
@@ -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;
}

Return to:

Send suggestions and report system problems to the System administrator.