From b8b6f321044ab085358de91a1f72a7d86593dfda Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 23 Nov 2018 01:13:47 +0100 Subject: [PATCH] cgroup: when we unload a unit, also update all its parent's members mask This way we can corectly ensure that when a unit that requires some controller goes away, we propagate the removal of it all the way up, so that the controller is turned off in all the parents too. --- src/core/unit.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/core/unit.c b/src/core/unit.c index a8c0f08e956..df340548bb7 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -570,6 +570,14 @@ void unit_free(Unit *u) { if (!u) return; + if (UNIT_ISSET(u->slice)) { + /* A unit is being dropped from the tree, make sure our parent slice recalculates the member mask */ + unit_invalidate_cgroup_members_masks(UNIT_DEREF(u->slice)); + + /* And make sure the parent is realized again, updating cgroup memberships */ + unit_add_to_cgroup_realize_queue(UNIT_DEREF(u->slice)); + } + u->transient_file = safe_fclose(u->transient_file); if (!MANAGER_IS_RELOADING(u->manager)) -- 2.47.3