From: Lennart Poettering Date: Fri, 23 Nov 2018 00:13:47 +0000 (+0100) Subject: cgroup: when we unload a unit, also update all its parent's members mask X-Git-Tag: v240~225^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b8b6f321044ab085358de91a1f72a7d86593dfda;p=thirdparty%2Fsystemd.git 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. --- 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))