diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2016-02-16 07:15:42 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2016-02-16 07:15:42 +0200 |
commit | bd8bd1640c72ceefd87b46a7a3d378c78c9081f5 (patch) | |
tree | 8224d8dfd67ab70240744dfb2df4c3af9fd1f850 | |
parent | 27366c475aa4955f296f169cf9acd33e36b9d7b3 (diff) | |
download | pies-bd8bd1640c72ceefd87b46a7a3d378c78c9081f5.tar.gz pies-bd8bd1640c72ceefd87b46a7a3d378c78c9081f5.tar.bz2 |
Associate program's activity flag with prog, instead of with component.
The CF_DISABLED flag is still retained to indicate that the component is
disabled administratively.
* src/prog.h (prog.v.p) <active>: New member.
(IS_ACTIVE_COMPONENT): Use active flag.
* src/comp.c (component_finish): Don't modify component flags.
* src/ctl.c (prog_serialize): Replace attribute "disabled" with
"active".
(fun_stop): Set prog->v.p.active
* src/pies.c (main): Use pies_master_argv to check whether
program name is absolute.
* src/piesctl.c (print_comp): Check "active" attribute.
* src/progman.c (register_prog0): Set prog->v.p.active.
(progman_create_sockets): Remove components if their
socket cannot be opened.
(progman_lookup_tcpmux, prog_open_socket)
(prog_start, progman_start)
(prog_start_prerequisites, react): Operate on prog->v.p.active
to test/change prog's activity state.
* src/sysvinit.c (enablecomp, runlevel_setup_prog): Operate on
prog->v.p.active to test/change prog's activity state.
(demand_prog, IS_RUNNING_DISABLED_PROG): Likewise.
-rw-r--r-- | src/comp.c | 3 | ||||
-rw-r--r-- | src/ctl.c | 9 | ||||
-rw-r--r-- | src/pies.c | 2 | ||||
-rw-r--r-- | src/piesctl.c | 6 | ||||
-rw-r--r-- | src/prog.h | 5 | ||||
-rw-r--r-- | src/progman.c | 72 | ||||
-rw-r--r-- | src/sysvinit.c | 25 |
7 files changed, 63 insertions, 59 deletions
@@ -731,5 +731,2 @@ component_finish (struct component *comp, grecs_locus_t *locus) } - - if (comp->mode == pies_comp_ondemand) - comp->flags |= CF_DISABLED; } @@ -1831,4 +1831,3 @@ prog_serialize (struct json_value *ret, struct prog *prog) - json_object_set_bool (ret, "disabled", - prog->v.p.comp->flags & CF_DISABLED); + json_object_set_bool (ret, "active", prog->v.p.active); @@ -1875,4 +1874,3 @@ fun_stop (struct json_value *result, struct prog *prog) { - if (prog->v.p.comp->flags & CF_DISABLED - && prog->v.p.status == status_stopped) + if (prog->v.p.active && prog->v.p.status == status_stopped) { @@ -1885,3 +1883,3 @@ fun_stop (struct json_value *result, struct prog *prog) { - prog->v.p.comp->flags |= CF_DISABLED; + prog->v.p.active = 0; progman_stop_component (&prog); @@ -1899,2 +1897,3 @@ fun_start (struct json_value *result, struct prog *prog) prog->v.p.comp->flags &= ~CF_DISABLED; + prog->v.p.active = 1; json_object_set_string (result, "status", "OK"); @@ -2160,3 +2160,3 @@ main (int argc, char **argv) - if (argv[0][0] != '/') + if (pies_master_argv[0][0] != '/') logmsg (LOG_NOTICE, diff --git a/src/piesctl.c b/src/piesctl.c index 5f26aec..e2e0483 100644 --- a/src/piesctl.c +++ b/src/piesctl.c @@ -1165,6 +1165,4 @@ print_comp (FILE *fp, struct json_value *v, size_t n) fbuf[fidx++] = '-'; - p = getval (v, "disabled", json_bool, 0); + p = getval (v, "active", json_bool, 0); if (p && p->v.b) - fbuf[fidx++] = '-'; - else { @@ -1176,2 +1174,4 @@ print_comp (FILE *fp, struct json_value *v, size_t n) } + else + fbuf[fidx++] = '-'; } @@ -53,3 +53,4 @@ struct prog struct component *comp; - int wait; + int wait :1; + int active :1; int socket; @@ -84,3 +85,3 @@ struct prog #define IS_ACTIVE_COMPONENT(prog) \ - (IS_COMPONENT(prog) && !((prog)->v.p.comp->flags & CF_DISABLED)) + (IS_COMPONENT(prog) && (prog)->v.p.active) diff --git a/src/progman.c b/src/progman.c index 1be7d27..d6929d6 100644 --- a/src/progman.c +++ b/src/progman.c @@ -113,3 +113,3 @@ progman_lookup_tcpmux (const char *service, const char *master) && ISCF_TCPMUX (prog->v.p.comp->flags) - && !(prog->v.p.comp->flags & CF_DISABLED) + && prog->v.p.active && prog->v.p.comp->service @@ -272,2 +272,3 @@ register_prog0 (struct component *comp) newp->v.p.socket = -1; + if (comp->mode == pies_comp_inetd) @@ -276,3 +277,8 @@ register_prog0 (struct component *comp) newp->v.p.status = status_stopped; - + + if ((comp->flags & CF_DISABLED) || comp->mode == pies_comp_ondemand) + newp->v.p.active = 0; + else + newp->v.p.active = 1; + if (comp->mode != pies_comp_exec) @@ -941,3 +947,3 @@ prog_open_socket (struct prog *prog) prog->v.p.status = status_stopped; - prog->v.p.comp->flags |= CF_DISABLED; + prog->v.p.active = 0; return 1; @@ -950,3 +956,3 @@ prog_open_socket (struct prog *prog) prog->v.p.status = status_stopped; - prog->v.p.comp->flags |= CF_DISABLED; + prog->v.p.active = 0; return 1; @@ -1043,3 +1049,3 @@ prog_start (struct prog *prog) { - if (!(prog->v.p.comp->flags & CF_DISABLED)) + if (prog->v.p.active) { @@ -1048,3 +1054,3 @@ prog_start (struct prog *prog) prog->v.p.status = status_stopped; - prog->v.p.comp->flags |= CF_DISABLED; + prog->v.p.active = 0; } @@ -1420,30 +1426,32 @@ progman_accept (int socket, void *data) -void -progman_create_sockets () +static int +prog_create_socket (struct prog *prog, void *data) { - struct prog *prog; - - for (prog = proghead; prog; prog = prog->next) + if (IS_COMPONENT (prog)) { - if (IS_COMPONENT (prog)) + struct component *comp = prog->v.p.comp; + if (comp->mode == pies_comp_inetd && !ISCF_TCPMUX (comp->flags) + && prog->v.p.socket == -1) { - struct component *comp = prog->v.p.comp; - if (comp->mode == pies_comp_inetd && !ISCF_TCPMUX (comp->flags) - && prog->v.p.socket == -1) + int fd = create_socket (comp->socket_url, + comp->socket_type, + comp->privs.user, comp->umask); + if (fd == -1) + destroy_prog (&prog); + else if (register_program_socket (comp->socket_type, fd, prog)) { - int fd = create_socket (comp->socket_url, - comp->socket_type, - comp->privs.user, comp->umask); - if (fd == -1) - prog->v.p.comp->flags |= CF_DISABLED; - else if (register_program_socket (comp->socket_type, fd, prog)) - { - close (fd); - prog->v.p.comp->flags |= CF_DISABLED; - } - else - prog->v.p.socket = fd; + close (fd); + destroy_prog (&prog); } + else + prog->v.p.socket = fd; } } + return 0; +} + +void +progman_create_sockets () +{ + progman_foreach (prog_create_socket, NULL); } @@ -1504,3 +1512,3 @@ progman_start () { - if (prog->v.p.comp->flags & CF_DISABLED) + if (!prog->v.p.active) disable_socket (prog->v.p.socket); @@ -1608,3 +1616,3 @@ prog_start_prerequisites (struct prog *prog) - if (prog->v.p.comp->flags & CF_DISABLED) + if (!prog->v.p.active) return 1; @@ -1624,5 +1632,5 @@ prog_start_prerequisites (struct prog *prog) - if (comp->flags & CF_DISABLED) + if (!prog->v.p.active) { - prog->v.p.comp->flags |= CF_DISABLED; + prog->v.p.active = 0; return 1; @@ -2248,3 +2256,3 @@ react (struct prog *prog, int status, pid_t pid) prog_tag (prog)); - prog->v.p.comp->flags |= CF_DISABLED; + prog->v.p.active = 0; /* FIXME: diff --git a/src/sysvinit.c b/src/sysvinit.c index 0370fcc..625fd7b 100644 --- a/src/sysvinit.c +++ b/src/sysvinit.c @@ -242,4 +242,4 @@ enablecomp (struct prog *prog, void *data) case pies_comp_ondemand: - /* Disabled flag persists: */ - return !(prog->v.p.comp->flags & CF_DISABLED); + /* Active flag persists: */ + return prog->v.p.active; @@ -273,3 +273,5 @@ runlevel_setup_prog (struct prog *prog, void *data) { - if (IS_COMPONENT (prog) && is_sysvinit (prog->v.p.comp)) + if (IS_COMPONENT (prog) + && !(prog->v.p.comp->flags & CF_DISABLED) + && is_sysvinit (prog->v.p.comp)) { @@ -278,12 +280,9 @@ runlevel_setup_prog (struct prog *prog, void *data) return 0; + prog->v.p.active = rc; if (rc) - prog->v.p.comp->flags &= ~CF_DISABLED; - else - prog->v.p.comp->flags |= CF_DISABLED; - prog->v.p.wait = is_comp_wait (prog->v.p.comp); + prog->v.p.wait = is_comp_wait (prog->v.p.comp); debug (2, ("%s: %s%s", prog_tag (prog), - prog->v.p.comp->flags & CF_DISABLED ? - "disabled" : "enabled", - !(prog->v.p.comp->flags & CF_DISABLED) && prog->v.p.wait - ? " (wait)" : "")); + prog->v.p.active ? + "enabled" : "disabled", + prog->v.p.active && prog->v.p.wait ? " (wait)" : "")); } @@ -309,3 +308,3 @@ demand_prog (struct prog *prog, void *data) { - prog->v.p.comp->flags &= ~CF_DISABLED; + prog->v.p.active = 1; debug (1, ("%s: %s", prog_tag (prog), "enabled")); @@ -759,3 +758,3 @@ sysvinit_begin () && prog->v.p.status == status_running \ - && prog->v.p.comp->flags & CF_DISABLED) \ + && !prog->v.p.active) |