mirror of
https://github.com/troglobit/finit.git
synced 2026-10-26 12:14:37 +00:00
Avoid unnecessary restarts of services that do not support SIGHUP
When a service's condition transitions to `flux`, put it in the waiting state, even if it does not support SIGHUP. That way, if the condition returns to `on` we can simply SIGCONT it. If it goes to `off` it will still be stop/started as before.
This commit is contained in:
1 parent
e8d699c194
commit
c6055031b8
1 file changed
+13
-14
@@ -867,30 +867,29 @@ restart:
|
|||||||
}
|
}
|
||||||
|
|
||||||
cond = cond_get_agg(svc->cond);
|
cond = cond_get_agg(svc->cond);
|
||||||
|
switch (cond) {
|
||||||
if (cond == COND_OFF ||
|
case COND_OFF:
|
||||||
(!svc->sighup && (cond < COND_ON || svc_is_changed(svc)))) {
|
|
||||||
service_stop(svc);
|
service_stop(svc);
|
||||||
svc_set_state(svc, SVC_STOPPING_STATE);
|
svc_set_state(svc, SVC_STOPPING_STATE);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
if (cond == COND_FLUX) {
|
case COND_FLUX:
|
||||||
kill(svc->pid, SIGSTOP);
|
kill(svc->pid, SIGSTOP);
|
||||||
svc_set_state(svc, SVC_WAITING_STATE);
|
svc_set_state(svc, SVC_WAITING_STATE);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
if (svc_is_changed(svc)) {
|
case COND_ON:
|
||||||
if (svc->sighup) {
|
if (svc_is_changed(svc)) {
|
||||||
service_restart(svc);
|
if (svc->sighup) {
|
||||||
} else {
|
service_restart(svc);
|
||||||
service_stop(svc);
|
} else {
|
||||||
svc_set_state(svc, SVC_STOPPING_STATE);
|
service_stop(svc);
|
||||||
|
svc_set_state(svc, SVC_STOPPING_STATE);
|
||||||
|
}
|
||||||
|
svc_mark_clean(svc);
|
||||||
}
|
}
|
||||||
svc_mark_clean(svc);
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SVC_WAITING_STATE:
|
case SVC_WAITING_STATE:
|
||||||
|
|||||||
Reference in new issue
Block a user