core: propagate service state to socket in more load states
authorLennart Poettering <lennart@poettering.net>
Thu, 9 Jan 2020 10:51:40 +0000 (11:51 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 5 Feb 2020 13:31:59 +0000 (14:31 +0100)
It makes sense to filter state changes for some load states that
shouldn't happen, but the common cases should be accepted, because they
might happen during runtime when "systemctl daemon-reload" is issued and
unit files changed state in between. Otherwise we lose events.

Fixes: #4708
(cherry picked from commit 4c2ef3276735ad9f7fccf33f5bdcbe7d8751e7ec)

src/core/socket.c

index fc5ee69c9c90dcba61817a372390585a77aa5a54..c587eaebed5e2cb31e859a4fb6994b707b7a1221 100644 (file)
@@ -3257,7 +3257,12 @@ static void socket_trigger_notify(Unit *u, Unit *other) {
         assert(other);
 
         /* Filter out invocations with bogus state */
-        if (other->load_state != UNIT_LOADED || other->type != UNIT_SERVICE)
+        if (!IN_SET(other->load_state,
+                    UNIT_LOADED,
+                    UNIT_NOT_FOUND,
+                    UNIT_BAD_SETTING,
+                    UNIT_ERROR,
+                    UNIT_MASKED) || other->type != UNIT_SERVICE)
                 return;
 
         /* Don't propagate state changes from the service if we are already down */