mirror of
https://github.com/troglobit/finit.git
synced 2026-10-29 12:40:44 +00:00
service: keep a pending reload across a second conf reload
A service whose condition goes into flux during a reload is paused with its reload still pending. If another reload was requested in the meantime, re-parsing its unchanged .conf file cleared the pending mark, so the service was resumed without ever being reloaded. Seen with sshd <pid/syslogd> on Infix, where a configuration change that touched both landed as two reloads in a row and sshd kept its old listen addresses. The mark is only ever cleared once the change has been applied, so a mark that is still set when the file is parsed again means exactly that: not applied yet. Leave it alone. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
3 files changed
+84
-3
No files matched your search
+6
-3
@@ -2703,11 +2703,14 @@ svc_t *service_register(int type, char *cfg, struct rlimit rlimit[], char *file)
|
||||
if (cgroup)
|
||||
parse_cgroup(svc, cgroup);
|
||||
|
||||
/* New, recently modified or unchanged ... used on reload. */
|
||||
/*
|
||||
* New or modified since the last reload. The mark is cleared when
|
||||
* the change has been applied, on start or reload, so one that is
|
||||
* still set here is a change that has not been applied yet, e.g.
|
||||
* the service is paused waiting for a condition. Leave it.
|
||||
*/
|
||||
if ((file && conf_changed(file)) || conf_changed(svc_getenv(svc)) || svc->args_dirty)
|
||||
svc_mark_dirty(svc);
|
||||
else
|
||||
svc_mark_clean(svc);
|
||||
|
||||
svc_enable(svc);
|
||||
|
||||
|
||||
Reference in new issue
Block a user