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:
Tobias Waldekranz committed 2016-02-05 13:45:06 +01:00
1 parent e8d699c194
commit c6055031b8
1 file changed
+13 -14
+13 -14
View File
@@ -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: