1
0
mirror of https://github.com/systemd/systemd.git synced 2024-11-05 15:21:37 +03:00

core: fix re-realization of cgroup siblings

This is a fix-up for eef85c4a3f which
broke this.

Tracked down by @w-simon

Fixes: #14453
This commit is contained in:
Lennart Poettering 2020-01-09 17:30:31 +01:00
parent 8ac7339648
commit 65f6b6bdcb

View File

@ -2334,29 +2334,25 @@ unsigned manager_dispatch_cgroup_realize_queue(Manager *m) {
static void unit_add_siblings_to_cgroup_realize_queue(Unit *u) { static void unit_add_siblings_to_cgroup_realize_queue(Unit *u) {
Unit *slice; Unit *slice;
/* This adds the siblings of the specified unit and the /* This adds the siblings of the specified unit and the siblings of all parent units to the cgroup
* siblings of all parent units to the cgroup queue. (But * queue. (But neither the specified unit itself nor the parents.) */
* neither the specified unit itself nor the parents.) */
while ((slice = UNIT_DEREF(u->slice))) { while ((slice = UNIT_DEREF(u->slice))) {
Iterator i; Iterator i;
Unit *m; Unit *m;
void *v; void *v;
HASHMAP_FOREACH_KEY(v, m, u->dependencies[UNIT_BEFORE], i) { HASHMAP_FOREACH_KEY(v, m, slice->dependencies[UNIT_BEFORE], i) {
/* Skip units that have a dependency on the slice /* Skip units that have a dependency on the slice but aren't actually in it. */
* but aren't actually in it. */
if (UNIT_DEREF(m->slice) != slice) if (UNIT_DEREF(m->slice) != slice)
continue; continue;
/* No point in doing cgroup application for units /* No point in doing cgroup application for units without active processes. */
* without active processes. */
if (UNIT_IS_INACTIVE_OR_FAILED(unit_active_state(m))) if (UNIT_IS_INACTIVE_OR_FAILED(unit_active_state(m)))
continue; continue;
/* If the unit doesn't need any new controllers /* If the unit doesn't need any new controllers and has current ones realized, it
* and has current ones realized, it doesn't need * doesn't need any changes. */
* any changes. */
if (unit_has_mask_realized(m, if (unit_has_mask_realized(m,
unit_get_target_mask(m), unit_get_target_mask(m),
unit_get_enable_mask(m))) unit_get_enable_mask(m)))