cgroup: Handle error when destroying cgroup

If a cgroup fails to be destroyed (most likely because there are still
processes running as part of a service after the main pid exits), don't
free and remove the cgroup unit from the manager.  This fixes a
regression introduced by the cgroup rework in v205 where systemd would
forget about processes still running after the unit becomes inactive.
(This can happen when the main pid exits and KillMode=process or none).

(cherry picked from commit dab5bf8599)

Conflicts:
	src/core/cgroup.c
This commit is contained in:
Ross Lagerwall
2015-01-15 22:24:10 -05:00
committed by Zbigniew Jędrzejewski-Szmek
parent f91e7c6532
commit 2e1057e124
+3 -1
View File
@@ -781,8 +781,10 @@ void unit_destroy_cgroup(Unit *u) {
return;
r = cg_trim_everywhere(u->manager->cgroup_supported, u->cgroup_path, !unit_has_name(u, SPECIAL_ROOT_SLICE));
if (r < 0)
if (r < 0) {
log_debug("Failed to destroy cgroup %s: %s", u->cgroup_path, strerror(-r));
return;
}
hashmap_remove(u->manager->cgroup_unit, u->cgroup_path);