]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core/scope: don't assert when start is retried during cgroup chown
authorLuca Boccassi <luca.boccassi@gmail.com>
Wed, 1 Jul 2026 16:01:27 +0000 (17:01 +0100)
committerLuca Boccassi <luca.boccassi@gmail.com>
Wed, 1 Jul 2026 21:46:45 +0000 (22:46 +0100)
While a delegated scope waits for the async cgroup chown helper it sits
in SCOPE_START_CHOWN (UNIT_ACTIVATING). unit_start() forwards to
->start() while activating, so scope_start() could be re-entered in
that state and trip assert(s->state == SCOPE_DEAD), aborting PID 1.
Treat SCOPE_START_CHOWN as already-starting instead.

Follow-up for 03860190fefce8bbea3a6f0e77919b882ade517c

src/core/scope.c

index 5e116a6f314ecc0d708709a6a493628ad1010244..6d2e8836d82c82598654cdbfff2bdd8a4af48b5c 100644 (file)
@@ -437,6 +437,10 @@ static int scope_start(Unit *u) {
         if (IN_SET(s->state, SCOPE_STOP_SIGTERM, SCOPE_STOP_SIGKILL))
                 return -EAGAIN;
 
+        /* Already starting up (waiting for the async cgroup chown helper)? Then there's nothing to do. */
+        if (s->state == SCOPE_START_CHOWN)
+                return 0;
+
         assert(s->state == SCOPE_DEAD);
 
         if (!u->transient && !MANAGER_IS_RELOADING(u->manager))