diff --git a/src/core/cgroup.c b/src/core/cgroup.c index 4ec5dfa587f..839b1676c88 100644 --- a/src/core/cgroup.c +++ b/src/core/cgroup.c @@ -3142,7 +3142,9 @@ static int on_cgroup_empty_event(sd_event_source *s, void *userdata) { unit_add_to_gc_queue(u); - if (UNIT_VTABLE(u)->notify_cgroup_empty) + if (IN_SET(unit_active_state(u), UNIT_INACTIVE, UNIT_FAILED)) + unit_prune_cgroup(u); + else if (UNIT_VTABLE(u)->notify_cgroup_empty) UNIT_VTABLE(u)->notify_cgroup_empty(u); return 0; diff --git a/src/core/scope.c b/src/core/scope.c index 761eb5ea56e..72253421e23 100644 --- a/src/core/scope.c +++ b/src/core/scope.c @@ -629,11 +629,6 @@ static void scope_notify_cgroup_empty_event(Unit *u) { if (IN_SET(s->state, SCOPE_RUNNING, SCOPE_ABANDONED, SCOPE_STOP_SIGTERM, SCOPE_STOP_SIGKILL)) scope_enter_dead(s, SCOPE_SUCCESS); - - /* If the cgroup empty notification comes when the unit is not active, we must have failed to clean - * up the cgroup earlier and should do it now. */ - if (IN_SET(s->state, SCOPE_DEAD, SCOPE_FAILED)) - unit_prune_cgroup(u); } static void scope_notify_cgroup_oom_event(Unit *u, bool managed_oom) { diff --git a/src/core/service.c b/src/core/service.c index 533d7d3771a..38f87456749 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -3648,12 +3648,7 @@ static void service_notify_cgroup_empty_event(Unit *u) { /* If the cgroup empty notification comes when the unit is not active, we must have failed to clean * up the cgroup earlier and should do it now. */ - case SERVICE_DEAD: - case SERVICE_FAILED: - case SERVICE_DEAD_BEFORE_AUTO_RESTART: - case SERVICE_FAILED_BEFORE_AUTO_RESTART: case SERVICE_AUTO_RESTART: - case SERVICE_DEAD_RESOURCES_PINNED: unit_prune_cgroup(u); break;