aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2016-02-16 07:15:42 +0200
committerSergey Poznyakoff <gray@gnu.org>2016-02-16 07:15:42 +0200
commitbd8bd1640c72ceefd87b46a7a3d378c78c9081f5 (patch)
tree8224d8dfd67ab70240744dfb2df4c3af9fd1f850
parent27366c475aa4955f296f169cf9acd33e36b9d7b3 (diff)
downloadpies-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.c3
-rw-r--r--src/ctl.c9
-rw-r--r--src/pies.c2
-rw-r--r--src/piesctl.c6
-rw-r--r--src/prog.h5
-rw-r--r--src/progman.c72
-rw-r--r--src/sysvinit.c25
7 files changed, 63 insertions, 59 deletions
diff --git a/src/comp.c b/src/comp.c
index 83818c2..6a0e4ba 100644
--- a/src/comp.c
+++ b/src/comp.c
@@ -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
diff --git a/src/ctl.c b/src/ctl.c
index f4154f6..6e162e5 100644
--- a/src/ctl.c
+++ b/src/ctl.c
@@ -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)
1873static int 1872static int
1874fun_stop (struct json_value *result, struct prog *prog) 1873fun_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
diff --git a/src/pies.c b/src/pies.c
index 653a865..67aedd1 100644
--- a/src/pies.c
+++ b/src/pies.c
@@ -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 {
diff --git a/src/prog.h b/src/prog.h
index 4658518..3b20979 100644
--- a/src/prog.h
+++ b/src/prog.h
@@ -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
87struct prog *progman_locate (const char *name); 88struct prog *progman_locate (const char *name);
88int progman_foreach (int (*filter) (struct prog *, void *data), void *data); 89int 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
1421void 1427static int
1422progman_create_sockets () 1428prog_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,