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
@@ -729,9 +729,6 @@ component_finish (struct component *comp, grecs_locus_t *locus) | |||
729 | comp->prereq = NULL; | 729 | comp->prereq = NULL; |
730 | } | 730 | } |
731 | } | 731 | } |
732 | |||
733 | if (comp->mode == pies_comp_ondemand) | ||
734 | comp->flags |= CF_DISABLED; | ||
735 | } | 732 | } |
736 | } | 733 | } |
737 | 734 | ||
@@ -1829,8 +1829,7 @@ prog_serialize (struct json_value *ret, struct prog *prog) | |||
1829 | FORMAT_IDX (ret, "mode", pies_comp_mode_str, prog->v.p.comp->mode); | 1829 | FORMAT_IDX (ret, "mode", pies_comp_mode_str, prog->v.p.comp->mode); |
1830 | FORMAT_IDX (ret, "status", pies_status_str, prog->v.p.status); | 1830 | FORMAT_IDX (ret, "status", pies_status_str, prog->v.p.status); |
1831 | 1831 | ||
1832 | json_object_set_bool (ret, "disabled", | 1832 | json_object_set_bool (ret, "active", prog->v.p.active); |
1833 | prog->v.p.comp->flags & CF_DISABLED); | ||
1834 | 1833 | ||
1835 | if (prog->pid) | 1834 | if (prog->pid) |
1836 | json_object_set_number (ret, "PID", prog->pid); | 1835 | json_object_set_number (ret, "PID", prog->pid); |
@@ -1873,8 +1872,7 @@ fun_list (struct json_value *result, struct prog *prog) | |||
1873 | static int | 1872 | static int |
1874 | fun_stop (struct json_value *result, struct prog *prog) | 1873 | fun_stop (struct json_value *result, struct prog *prog) |
1875 | { | 1874 | { |
1876 | if (prog->v.p.comp->flags & CF_DISABLED | 1875 | if (prog->v.p.active && prog->v.p.status == status_stopped) |
1877 | && prog->v.p.status == status_stopped) | ||
1878 | { | 1876 | { |
1879 | 1877 | ||
1880 | json_object_set_string (result, "status", "ER"); | 1878 | json_object_set_string (result, "status", "ER"); |
@@ -1883,7 +1881,7 @@ fun_stop (struct json_value *result, struct prog *prog) | |||
1883 | } | 1881 | } |
1884 | else | 1882 | else |
1885 | { | 1883 | { |
1886 | prog->v.p.comp->flags |= CF_DISABLED; | 1884 | prog->v.p.active = 0; |
1887 | progman_stop_component (&prog); | 1885 | progman_stop_component (&prog); |
1888 | json_object_set_string (result, "status", "OK"); | 1886 | json_object_set_string (result, "status", "OK"); |
1889 | } | 1887 | } |
@@ -1897,6 +1895,7 @@ fun_start (struct json_value *result, struct prog *prog) | |||
1897 | { | 1895 | { |
1898 | case status_stopped: | 1896 | case status_stopped: |
1899 | prog->v.p.comp->flags &= ~CF_DISABLED; | 1897 | prog->v.p.comp->flags &= ~CF_DISABLED; |
1898 | prog->v.p.active = 1; | ||
1900 | json_object_set_string (result, "status", "OK"); | 1899 | json_object_set_string (result, "status", "OK"); |
1901 | break; | 1900 | break; |
1902 | 1901 | ||
@@ -2158,7 +2158,7 @@ main (int argc, char **argv) | |||
2158 | create_pidfile (pidfile); | 2158 | create_pidfile (pidfile); |
2159 | } | 2159 | } |
2160 | 2160 | ||
2161 | if (argv[0][0] != '/') | 2161 | if (pies_master_argv[0][0] != '/') |
2162 | logmsg (LOG_NOTICE, | 2162 | logmsg (LOG_NOTICE, |
2163 | _("not started as an absolute pathname; " | 2163 | _("not started as an absolute pathname; " |
2164 | "restart will not work")); | 2164 | "restart will not work")); |
diff --git a/src/piesctl.c b/src/piesctl.c index 5f26aec..e2e0483 100644 --- a/src/piesctl.c +++ b/src/piesctl.c | |||
@@ -1163,10 +1163,8 @@ print_comp (FILE *fp, struct json_value *v, size_t n) | |||
1163 | fbuf[fidx++] = kwtoc (p->v.s, mode_trans); | 1163 | fbuf[fidx++] = kwtoc (p->v.s, mode_trans); |
1164 | else | 1164 | else |
1165 | fbuf[fidx++] = '-'; | 1165 | fbuf[fidx++] = '-'; |
1166 | p = getval (v, "disabled", json_bool, 0); | 1166 | p = getval (v, "active", json_bool, 0); |
1167 | if (p && p->v.b) | 1167 | if (p && p->v.b) |
1168 | fbuf[fidx++] = '-'; | ||
1169 | else | ||
1170 | { | 1168 | { |
1171 | p = getval (v, "status", json_string, 0); | 1169 | p = getval (v, "status", json_string, 0); |
1172 | if (p) | 1170 | if (p) |
@@ -1174,6 +1172,8 @@ print_comp (FILE *fp, struct json_value *v, size_t n) | |||
1174 | else | 1172 | else |
1175 | fbuf[fidx++] = '-'; | 1173 | fbuf[fidx++] = '-'; |
1176 | } | 1174 | } |
1175 | else | ||
1176 | fbuf[fidx++] = '-'; | ||
1177 | } | 1177 | } |
1178 | else if (strcmp (type, "redirector") == 0) | 1178 | else if (strcmp (type, "redirector") == 0) |
1179 | { | 1179 | { |
@@ -51,7 +51,8 @@ struct prog | |||
51 | struct | 51 | struct |
52 | { | 52 | { |
53 | struct component *comp; | 53 | struct component *comp; |
54 | int wait; | 54 | int wait :1; |
55 | int active :1; | ||
55 | int socket; | 56 | int socket; |
56 | struct prog *redir[2]; /* Pointers to redirectors */ | 57 | struct prog *redir[2]; /* Pointers to redirectors */ |
57 | time_t timestamp; /* Time of last startup */ | 58 | time_t timestamp; /* Time of last startup */ |
@@ -82,7 +83,7 @@ struct prog | |||
82 | 83 | ||
83 | #define IS_COMPONENT(p) ((p)->type == TYPE_COMPONENT) | 84 | #define IS_COMPONENT(p) ((p)->type == TYPE_COMPONENT) |
84 | #define IS_ACTIVE_COMPONENT(prog) \ | 85 | #define IS_ACTIVE_COMPONENT(prog) \ |
85 | (IS_COMPONENT(prog) && !((prog)->v.p.comp->flags & CF_DISABLED)) | 86 | (IS_COMPONENT(prog) && (prog)->v.p.active) |
86 | 87 | ||
87 | struct prog *progman_locate (const char *name); | 88 | struct prog *progman_locate (const char *name); |
88 | int progman_foreach (int (*filter) (struct prog *, void *data), void *data); | 89 | int progman_foreach (int (*filter) (struct prog *, void *data), void *data); |
diff --git a/src/progman.c b/src/progman.c index 1be7d27..d6929d6 100644 --- a/src/progman.c +++ b/src/progman.c | |||
@@ -111,7 +111,7 @@ progman_lookup_tcpmux (const char *service, const char *master) | |||
111 | for (prog = proghead; prog; prog = prog->next) | 111 | for (prog = proghead; prog; prog = prog->next) |
112 | if (IS_COMPONENT (prog) | 112 | if (IS_COMPONENT (prog) |
113 | && ISCF_TCPMUX (prog->v.p.comp->flags) | 113 | && ISCF_TCPMUX (prog->v.p.comp->flags) |
114 | && !(prog->v.p.comp->flags & CF_DISABLED) | 114 | && prog->v.p.active |
115 | && prog->v.p.comp->service | 115 | && prog->v.p.comp->service |
116 | && strcasecmp (prog->v.p.comp->service, service) == 0 | 116 | && strcasecmp (prog->v.p.comp->service, service) == 0 |
117 | && prog->v.p.comp->tcpmux | 117 | && prog->v.p.comp->tcpmux |
@@ -270,11 +270,17 @@ register_prog0 (struct component *comp) | |||
270 | newp->facility = comp->facility; | 270 | newp->facility = comp->facility; |
271 | newp->v.p.comp = comp; | 271 | newp->v.p.comp = comp; |
272 | newp->v.p.socket = -1; | 272 | newp->v.p.socket = -1; |
273 | |||
273 | if (comp->mode == pies_comp_inetd) | 274 | if (comp->mode == pies_comp_inetd) |
274 | newp->v.p.status = status_listener; | 275 | newp->v.p.status = status_listener; |
275 | else | 276 | else |
276 | newp->v.p.status = status_stopped; | 277 | newp->v.p.status = status_stopped; |
277 | 278 | ||
279 | if ((comp->flags & CF_DISABLED) || comp->mode == pies_comp_ondemand) | ||
280 | newp->v.p.active = 0; | ||
281 | else | ||
282 | newp->v.p.active = 1; | ||
283 | |||
278 | if (comp->mode != pies_comp_exec) | 284 | if (comp->mode != pies_comp_exec) |
279 | comp->redir[RETR_OUT].type = redir_null; | 285 | comp->redir[RETR_OUT].type = redir_null; |
280 | 286 | ||
@@ -939,7 +945,7 @@ prog_open_socket (struct prog *prog) | |||
939 | if (prog->v.p.socket == -1) | 945 | if (prog->v.p.socket == -1) |
940 | { | 946 | { |
941 | prog->v.p.status = status_stopped; | 947 | prog->v.p.status = status_stopped; |
942 | prog->v.p.comp->flags |= CF_DISABLED; | 948 | prog->v.p.active = 0; |
943 | return 1; | 949 | return 1; |
944 | } | 950 | } |
945 | if (listen (prog->v.p.socket, 8)) | 951 | if (listen (prog->v.p.socket, 8)) |
@@ -948,7 +954,7 @@ prog_open_socket (struct prog *prog) | |||
948 | close (prog->v.p.socket); | 954 | close (prog->v.p.socket); |
949 | prog->v.p.socket = -1; | 955 | prog->v.p.socket = -1; |
950 | prog->v.p.status = status_stopped; | 956 | prog->v.p.status = status_stopped; |
951 | prog->v.p.comp->flags |= CF_DISABLED; | 957 | prog->v.p.active = 0; |
952 | return 1; | 958 | return 1; |
953 | } | 959 | } |
954 | return 0; | 960 | return 0; |
@@ -1041,12 +1047,12 @@ prog_start (struct prog *prog) | |||
1041 | { | 1047 | { |
1042 | if (!init_process) | 1048 | if (!init_process) |
1043 | { | 1049 | { |
1044 | if (!(prog->v.p.comp->flags & CF_DISABLED)) | 1050 | if (prog->v.p.active) |
1045 | { | 1051 | { |
1046 | logmsg (LOG_NOTICE, "disabling sysvinit component %s", | 1052 | logmsg (LOG_NOTICE, "disabling sysvinit component %s", |
1047 | prog_tag (prog)); | 1053 | prog_tag (prog)); |
1048 | prog->v.p.status = status_stopped; | 1054 | prog->v.p.status = status_stopped; |
1049 | prog->v.p.comp->flags |= CF_DISABLED; | 1055 | prog->v.p.active = 0; |
1050 | } | 1056 | } |
1051 | return; | 1057 | return; |
1052 | } | 1058 | } |
@@ -1418,34 +1424,36 @@ progman_accept (int socket, void *data) | |||
1418 | return _prog_wait (p); | 1424 | return _prog_wait (p); |
1419 | } | 1425 | } |
1420 | 1426 | ||
1421 | void | 1427 | static int |
1422 | progman_create_sockets () | 1428 | prog_create_socket (struct prog *prog, void *data) |
1423 | { | 1429 | { |
1424 | struct prog *prog; | 1430 | if (IS_COMPONENT (prog)) |
1425 | |||
1426 | for (prog = proghead; prog; prog = prog->next) | ||
1427 | { | 1431 | { |
1428 | if (IS_COMPONENT (prog)) | 1432 | struct component *comp = prog->v.p.comp; |
1433 | if (comp->mode == pies_comp_inetd && !ISCF_TCPMUX (comp->flags) | ||
1434 | && prog->v.p.socket == -1) | ||
1429 | { | 1435 | { |
1430 | struct component *comp = prog->v.p.comp; | 1436 | int fd = create_socket (comp->socket_url, |