aboutsummaryrefslogtreecommitdiff
path: root/src/progman.c
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2015-11-05 10:26:17 +0200
committerSergey Poznyakoff <gray@gnu.org.ua>2015-11-05 10:26:17 +0200
commite7e3df9a6c4599f982a62bb8d7cd973ccd8cee72 (patch)
treee897c5d7e85bdaa5503aab6a25c174cf06d1c5d2 /src/progman.c
parent6cc676f7f8d86849607b7f707c8682e7efdb65c3 (diff)
downloadpies-e7e3df9a6c4599f982a62bb8d7cd973ccd8cee72.tar.gz
pies-e7e3df9a6c4599f982a62bb8d7cd973ccd8cee72.tar.bz2
New ctl commands: start, stop, restart, reboot, shutdown.
* src/ctl.c (CTL_ACTION_STATE): New state. (cmdtab): Add new commands: start, stop, restart, reboot, shutdown. (ctlio)<action>: New member. (ctlio_create): Initialize action. (list_prog): List scheduled wakeup time for sleeping components. (cmd_start,cmd_stop) (cmd_restart,cmd_reboot,cmd_shutdown): New functions. (ctlwr): Handle CTL_ACTION_STATE. * src/pies.c (pies_schedule_action): New function. (stop_components): Use progman_stop_tag(). * src/pies.h (pies_schedule_action, progman_stop_tag): New protos. (progman_stop_component): Remove. * src/prog.h (progman_locate, progman_stop_component): New protos. * src/progman.c (progman_locate): New function. (progman_cleanup): Set status depending on the CF_DISABLED bit. (progman_stop_component): Take struct prog* as argument. (progman_stop_tag): New function.
Diffstat (limited to 'src/progman.c')
-rw-r--r--src/progman.c77
1 files changed, 48 insertions, 29 deletions
diff --git a/src/progman.c b/src/progman.c
index d045efa..90d54b5 100644
--- a/src/progman.c
+++ b/src/progman.c
@@ -23,6 +23,17 @@ static pies_depmap_t depmap;
static int recompute_alarm;
static struct grecs_symtab *conn_tab;
+struct prog *
+progman_locate (const char *name)
+{
+ struct prog *prog;
+
+ for (prog = proghead; prog; prog = prog->next)
+ if (strcmp (prog->tag, name) == 0)
+ break;
+ return prog;
+}
+
void
progman_foreach (int (*filter) (struct prog *, void *data), void *data)
{
@@ -624,7 +635,6 @@ static size_t envsize; /* Size of environ. If it is not 0, then we
#define ENV_REMOTEIP "REMOTEIP"
#define ENV_REMOTEPORT "REMOTEPORT"
#define ENV_REMOTEHOST "REMOTEHOST"
-
static char *sockenv_hint[] = {
"-" ENV_PROTO,
"-" ENV_SOCKTYPE,
@@ -2395,7 +2405,8 @@ progman_cleanup (int expect_term)
if (is_sysvinit (prog->v.p.comp))
sysvinit_acct (SYSV_ACCT_PROC_STOP, "", prog->tag, pid, "");
- prog->v.p.status = status_enabled;
+ prog->v.p.status = (prog->v.p.comp->flags & CF_DISABLED)
+ ? status_disabled : status_enabled;
prog_stop_dependents (prog);
if (!expect_term)
react (prog, status, pid);
@@ -2426,36 +2437,44 @@ progman_cleanup (int expect_term)
}
void
-progman_stop_component (const char *name)
+progman_stop_component (struct prog *prog)
{
- struct prog *prog;
-
- for (prog = proghead; prog; prog = prog->next)
- if (IS_COMPONENT (prog) && strcmp (prog->tag, name) == 0)
- {
- logmsg (LOG_INFO, _("stopping component `%s'"), prog->tag);
- switch (prog->v.p.status)
- {
- case status_enabled:
- case status_listener:
- prog_stop (prog, SIGTERM);
- break;
-
- case status_disabled:
- if (!(prog->v.p.comp->flags & CF_DISABLED))
+ if (prog && IS_COMPONENT (prog))
+ {
+ switch (prog->v.p.status)
+ {
+ case status_enabled:
+ case status_listener:
+ logmsg (LOG_INFO, _("stopping component `%s'"), prog->tag);
+ prog_stop (prog, SIGTERM);
+ break;
+
+ case status_disabled:
+ if (!(prog->v.p.comp->flags & CF_DISABLED))
+ {
+ logmsg (LOG_INFO, _("enabling component `%s'"), prog->tag);
prog->v.p.status = status_enabled;
- break;
+ }
+ break;
- case status_sleeping:
- prog->v.p.failcount = 0;
- break;
-
- default:
- logmsg (LOG_INFO,
- _("stopping component `%s': component not started"),
- prog->tag);
- }
- }
+ case status_sleeping:
+ logmsg (LOG_INFO, _("waking up component `%s'"), prog->tag);
+ prog->v.p.failcount = 0;
+ break;
+
+ default:
+ logmsg (LOG_INFO,
+ _("stopping component `%s': component not started"),
+ prog->tag);
+ }
+ }
+}
+
+void
+progman_stop_tag (const char *name)
+{
+ struct prog *prog = progman_locate (name);
+ progman_stop_component (prog);
}
void

Return to:

Send suggestions and report system problems to the System administrator.