]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
socket: fix socket activation of stopped services with pinned FD store
authorMichal Sekletar <msekleta@redhat.com>
Tue, 30 Jul 2024 14:22:03 +0000 (16:22 +0200)
committerLuca Boccassi <luca.boccassi@gmail.com>
Wed, 31 Jul 2024 14:29:07 +0000 (16:29 +0200)
src/core/socket.c
test/units/TEST-04-JOURNAL.stopped-socket-activation.sh [new file with mode: 0755]

index 400edeb86b881c14db5246bcb2f23fbd720d7d4d..58c3a11a491e63c345e4b0d0de924a7e286be37c 100644 (file)
@@ -2480,7 +2480,7 @@ static int socket_start(Unit *u) {
                 /* If the service is already active we cannot start the
                  * socket */
                 if (!IN_SET(service->state,
-                            SERVICE_DEAD, SERVICE_DEAD_BEFORE_AUTO_RESTART, SERVICE_FAILED, SERVICE_FAILED_BEFORE_AUTO_RESTART,
+                            SERVICE_DEAD, SERVICE_DEAD_BEFORE_AUTO_RESTART, SERVICE_DEAD_RESOURCES_PINNED, SERVICE_FAILED, SERVICE_FAILED_BEFORE_AUTO_RESTART,
                             SERVICE_AUTO_RESTART, SERVICE_AUTO_RESTART_QUEUED))
                         return log_unit_error_errno(u, SYNTHETIC_ERRNO(EBUSY),
                                                     "Socket service %s already active, refusing.", UNIT(service)->id);
@@ -3367,7 +3367,7 @@ static void socket_trigger_notify(Unit *u, Unit *other) {
                 return;
 
         if (IN_SET(SERVICE(other)->state,
-                   SERVICE_DEAD, SERVICE_DEAD_BEFORE_AUTO_RESTART, SERVICE_FAILED, SERVICE_FAILED_BEFORE_AUTO_RESTART,
+                   SERVICE_DEAD, SERVICE_DEAD_BEFORE_AUTO_RESTART, SERVICE_DEAD_RESOURCES_PINNED, SERVICE_FAILED, SERVICE_FAILED_BEFORE_AUTO_RESTART,
                    SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL,
                    SERVICE_AUTO_RESTART, SERVICE_AUTO_RESTART_QUEUED))
                socket_enter_listening(s);
diff --git a/test/units/TEST-04-JOURNAL.stopped-socket-activation.sh b/test/units/TEST-04-JOURNAL.stopped-socket-activation.sh
new file mode 100755 (executable)
index 0000000..083f5fa
--- /dev/null
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+set -eux
+set -o pipefail
+
+systemctl stop systemd-journald.service
+systemd-cat date
+
+# shellcheck disable=SC2016
+timeout 30 bash -xec 'until test "$(systemctl show -p SubState --value systemd-journald.service)" = "running"; do sleep 1; done'