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
@@ -731,5 +731,2 @@ component_finish (struct component *comp, grecs_locus_t *locus)
}
-
- if (comp->mode == pies_comp_ondemand)
- comp->flags |= CF_DISABLED;
}
diff --git a/src/ctl.c b/src/ctl.c
index f4154f6..6e162e5 100644
--- a/src/ctl.c
+++ b/src/ctl.c
@@ -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");
diff --git a/src/pies.c b/src/pies.c
index 653a865..67aedd1 100644
--- a/src/pies.c
+++ b/src/pies.c
@@ -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++] = '-';
}
diff --git a/src/prog.h b/src/prog.h
index 4658518..3b20979 100644
--- a/src/prog.h
+++ b/src/prog.h
@@ -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)

Return to:

Send suggestions and report system problems to the System administrator.