]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core/manager-serialize: discern daemon-reload/reexec via objective
authorMike Yuan <me@yhndnzj.com>
Fri, 13 Feb 2026 19:36:39 +0000 (20:36 +0100)
committerMike Yuan <me@yhndnzj.com>
Mon, 16 Feb 2026 08:44:58 +0000 (09:44 +0100)
src/core/manager-serialize.c

index 9318d02f9af57e06fe9f022fb713d6f350394ebc..f40df69764f5d387f7f02412dd42f387582cc5ac 100644 (file)
@@ -282,7 +282,6 @@ static void manager_deserialize_gid_refs_one(Manager *m, const char *value) {
 }
 
 int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
-        bool deserialize_varlink_sockets = false;
         int r;
 
         assert(m);
@@ -491,22 +490,16 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
                         if (r < 0)
                                 return r;
                 } else if ((val = startswith(l, "varlink-server-socket-address="))) {
-                        if (!m->varlink_server) {
-                                r = manager_setup_varlink_server(m);
-                                if (r < 0) {
-                                        log_warning_errno(r, "Failed to setup varlink server, ignoring: %m");
-                                        continue;
-                                }
-
-                                deserialize_varlink_sockets = true;
-                        }
+                        if (m->objective == MANAGER_RELOAD)
+                                /* We don't destroy varlink server on daemon-reload (in contrast to reexec) -> skip! */
+                                continue;
 
-                        /* To avoid unnecessary deserialization (i.e. during reload vs. reexec) we only deserialize
-                         * the FDs if we had to create a new m->varlink_server. The deserialize_varlink_sockets flag
-                         * is initialized outside of the loop, is flipped after the VarlinkServer is setup, and
-                         * remains set until all serialized contents are handled. */
-                        if (deserialize_varlink_sockets)
+                        r = manager_setup_varlink_server(m);
+                        if (r < 0)
+                                log_warning_errno(r, "Failed to setup varlink server, ignoring: %m");
+                        else
                                 (void) varlink_server_deserialize_one(m->varlink_server, val, fds);
+
                 } else if ((val = startswith(l, "dump-ratelimit=")))
                         deserialize_ratelimit(&m->dump_ratelimit, "dump-ratelimit", val);
                 else if ((val = startswith(l, "reload-reexec-ratelimit=")))