diff --git a/src/service.c b/src/service.c index 74fb9410..920dd0de 100644 --- a/src/service.c +++ b/src/service.c @@ -732,6 +732,9 @@ recreate: else svc_mark_clean(svc); + if (!file) + svc->protected = 1; + /* Free duped line, from above */ free(line); return 0; diff --git a/src/svc.c b/src/svc.c index d5c1a01d..668754c4 100644 --- a/src/svc.c +++ b/src/svc.c @@ -356,8 +356,12 @@ void svc_mark_dynamic(void) { svc_t *svc, *iter = NULL; - for (svc = svc_iterator(&iter, 1); svc; svc = svc_iterator(&iter, 0)) + for (svc = svc_iterator(&iter, 1); svc; svc = svc_iterator(&iter, 0)) { + if (svc->protected) + continue; + *((int *)&svc->dirty) = -1; + } } void svc_mark_dirty(svc_t *svc) diff --git a/src/svc.h b/src/svc.h index 6242b770..63790a95 100644 --- a/src/svc.h +++ b/src/svc.h @@ -92,6 +92,7 @@ typedef struct svc { pid_t pid; const svc_state_t state; /* Paused, Reloading, Restart, Running, ... */ svc_type_t type; /* Service, run, task, inetd, ... */ + int protected; /* Services like dbus-daemon & udev by Finit */ const int dirty; /* -1: removal, 0: unmodified, 1: modified */ int starting; /* ... waiting for pidfile to be re-asserted */ int runlevels;