]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core: check for SERVICE_RELOAD_NOTIFY in manager_dbus_is_running
authormsizanoen1 <msizanoen@qtmlabs.xyz>
Tue, 2 May 2023 09:59:07 +0000 (16:59 +0700)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 2 May 2023 15:14:35 +0000 (00:14 +0900)
This ensures that systemd won't erronously disconnect from the system
bus in case a bus recheck is triggered immediately after the bus service
emits `RELOADING=1`.

This fixes an issue where systemd-logind sometimes randomly stops
receiving `UnitRemoved` after a system update.

This also handles SERVICE_RELOAD_SIGNAL just in case somebody ever
creates a D-Bus broker implementation that uses `Type=notify-reload`.

src/core/manager.c

index 9e91aba632707970e36ff72604c99853cfc987b6..9226cd2ab7dad872c3650baeeda6c8ccae86d867 100644 (file)
@@ -1822,7 +1822,11 @@ static bool manager_dbus_is_running(Manager *m, bool deserialized) {
         u = manager_get_unit(m, SPECIAL_DBUS_SERVICE);
         if (!u)
                 return false;
-        if (!IN_SET((deserialized ? SERVICE(u)->deserialized_state : SERVICE(u)->state), SERVICE_RUNNING, SERVICE_RELOAD))
+        if (!IN_SET((deserialized ? SERVICE(u)->deserialized_state : SERVICE(u)->state),
+                    SERVICE_RUNNING,
+                    SERVICE_RELOAD,
+                    SERVICE_RELOAD_NOTIFY,
+                    SERVICE_RELOAD_SIGNAL))
                 return false;
 
         return true;