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 16:27:08 +0000 (17:27 +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)
(cherry picked from commit 14164ec6bc7779201e6ea16c8e8ccff4f98bb4cd)

src/core/socket.c

index e94d6feef9a53ad61c003bbcb3f536cd06ac2524..a8019e711c526c53950bc2b26cec1e803dd3dd6a 100644 (file)
@@ -3220,7 +3220,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 */