From: Lennart Poettering Date: Thu, 8 Jun 2023 09:11:28 +0000 (+0200) Subject: unit: don't gc unit in oom queue X-Git-Tag: v254-rc1~252^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=935f80428fd3220c83163cc4b5a637873e68babb;p=thirdparty%2Fsystemd.git unit: don't gc unit in oom queue This is a follow-up for 8db998981a4fefd0122bcf5f965726b63c9045c2, and follows a similar logic: a pending OOM event really trumps everything: we should not GC a unit while it is pending. --- diff --git a/src/core/cgroup.c b/src/core/cgroup.c index 839b1676c88..34643b242ce 100644 --- a/src/core/cgroup.c +++ b/src/core/cgroup.c @@ -3319,6 +3319,8 @@ static int on_cgroup_oom_event(sd_event_source *s, void *userdata) { } (void) unit_check_oom(u); + unit_add_to_gc_queue(u); + return 0; } diff --git a/src/core/unit.c b/src/core/unit.c index 7b6d50e0eaf..80f398c309c 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -441,7 +441,10 @@ bool unit_may_gc(Unit *u) { if (u->perpetual) return false; - if (u->in_cgroup_empty_queue) + /* if we saw a cgroup empty event for this unit, stay around until we processed it so that we remove + * the empty cgroup if possible. Similar, process any pending OOM events if they are already queued + * before we release the unit. */ + if (u->in_cgroup_empty_queue || u->in_cgroup_oom_queue) return false; if (sd_bus_track_count(u->bus_track) > 0)