chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
c904f64
)
service: never clean up a service that still has a process in it
author
Lennart Poettering
<lennart@poettering.net>
Fri, 25 Feb 2011 00:49:10 +0000
(
01:49
+0100)
committer
Lennart Poettering
<lennart@poettering.net>
Fri, 25 Feb 2011 00:49:10 +0000
(
01:49
+0100)
src/service.c
patch
|
blob
|
history
diff --git
a/src/service.c
b/src/service.c
index e928d1a5e0050fd533fdd2bbb64b27756bf06229..fef96e17dd96da3fd54501c8b7f1a8bd41e2dab1 100644
(file)
--- a/
src/service.c
+++ b/
src/service.c
@@
-2496,16
+2496,26
@@
static const char *service_sub_state_to_string(Unit *u) {
return service_state_to_string(SERVICE(u)->state);
}
return service_state_to_string(SERVICE(u)->state);
}
-#ifdef HAVE_SYSV_COMPAT
static bool service_check_gc(Unit *u) {
Service *s = SERVICE(u);
assert(s);
static bool service_check_gc(Unit *u) {
Service *s = SERVICE(u);
assert(s);
- return !!s->sysv_path;
-}
+ /* Never clean up services that still have a process around,
+ * even if the service is formally dead. */
+ if (cgroup_good(s) > 0 ||
+ main_pid_good(s) > 0 ||
+ control_pid_good(s) > 0)
+ return true;
+
+#ifdef HAVE_SYSV_COMPAT
+ if (s->sysv_path)
+ return true;
#endif
#endif
+ return false;
+}
+
static bool service_check_snapshot(Unit *u) {
Service *s = SERVICE(u);
static bool service_check_snapshot(Unit *u) {
Service *s = SERVICE(u);
@@
-3317,9
+3327,7
@@
const UnitVTable service_vtable = {
.active_state = service_active_state,
.sub_state_to_string = service_sub_state_to_string,
.active_state = service_active_state,
.sub_state_to_string = service_sub_state_to_string,
-#ifdef HAVE_SYSV_COMPAT
.check_gc = service_check_gc,
.check_gc = service_check_gc,
-#endif
.check_snapshot = service_check_snapshot,
.sigchld_event = service_sigchld_event,
.check_snapshot = service_check_snapshot,
.sigchld_event = service_sigchld_event,