diff options
Diffstat (limited to 'src/progman.c')
-rw-r--r-- | src/progman.c | 55 |
1 files changed, 43 insertions, 12 deletions
diff --git a/src/progman.c b/src/progman.c index f0d0de6..15b8c44 100644 --- a/src/progman.c +++ b/src/progman.c @@ -108,2 +108,25 @@ progman_iterate_comp (int (*fun) (struct component *, void *), void *data) +void +progman_sysvinit_enable (int (*fun) (struct component *, int, void *), + void *data) +{ + struct prog *prog; + + for (prog = proghead; prog; prog = prog->next) + if (IS_COMPONENT (prog) && is_sysvinit (prog->v.p.comp)) + { + int rc = fun (prog->v.p.comp, prog->v.p.status == status_finished, + data); + if (rc < 0) + continue; + if (rc) + prog->v.p.status = status_enabled; + else + prog->v.p.status = status_disabled; + debug (1, ("%s: %s", prog->tag, + prog->v.p.status == status_enabled ? + "enabled" : "disabled")); + } +} + static struct prog * @@ -414,3 +437,6 @@ progman_running_p () prog->pid > 0) - return 1; + { + debug (1, ("COMP %s still running", prog->tag)); + return 1; + } } @@ -1187,10 +1213,17 @@ prog_start (struct prog *prog) - if (is_sysvinit (prog->v.p.comp->mode) && !init_process && - prog->v.p.status != status_disabled) + if (is_sysvinit (prog->v.p.comp)) { - logmsg (LOG_NOTICE, "disabling sysvinit component %s", prog->tag); - prog->v.p.status = status_disabled; - return; + if (!init_process) + { + if (prog->v.p.status != status_disabled) + { + logmsg (LOG_NOTICE, "disabling sysvinit component %s", + prog->tag); + prog->v.p.status = status_disabled; + } + return; + } + debug (1, ("ok to start %s", prog->v.p.comp->tag)); } - + /* This call returns 1 in two cases: Either prog is marked as disabled, @@ -1784,4 +1817,3 @@ progman_start () { - if ((prog->v.p.comp->flags & CF_DISABLED) - || !runlevel_match (prog->v.p.comp)) + if (prog->v.p.comp->flags & CF_DISABLED) disable_socket (prog->v.p.socket); @@ -1793,4 +1825,3 @@ progman_start () } - else if ((prog->v.p.status == status_enabled && prog->pid == 0 - && runlevel_match (prog->v.p.comp)) + else if ((prog->v.p.status == status_enabled && prog->pid == 0) || prog->v.p.status == status_sleeping) @@ -2461,3 +2492,3 @@ progman_cleanup (int expect_term) } - else if (is_sysvinit(prog->v.p.comp->mode)) + else if (prog->v.p.comp->mode >= pies_mark_sysvinit) { |