]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
varlink-serialize: deserialize to correct event priority
authorMike Yuan <me@yhndnzj.com>
Sun, 15 Feb 2026 02:21:01 +0000 (03:21 +0100)
committerMike Yuan <me@yhndnzj.com>
Mon, 16 Feb 2026 08:44:58 +0000 (09:44 +0100)
src/libsystemd/sd-varlink/sd-varlink.c
src/libsystemd/sd-varlink/varlink-internal.h
src/shared/varlink-serialize.c

index 4e7467e6d0bcb0745cc07757eadaf78fa45b698c..bcb16af89fdbcadb93128c3262a5de3fed8823cf 100644 (file)
@@ -3743,11 +3743,7 @@ static int varlink_server_create_listen_fd_socket(sd_varlink_server *s, int fd,
         };
 
         if (s->event) {
-                r = sd_event_add_io(s->event, &ss->event_source, fd, EPOLLIN, connect_callback, ss);
-                if (r < 0)
-                        return r;
-
-                r = sd_event_source_set_priority(ss->event_source, s->event_priority);
+                r = varlink_server_add_socket_event_source(s, ss);
                 if (r < 0)
                         return r;
         }
@@ -4071,13 +4067,14 @@ _public_ int sd_varlink_server_set_exit_on_idle(sd_varlink_server *s, int b) {
         return 0;
 }
 
-int varlink_server_add_socket_event_source(sd_varlink_server *s, VarlinkServerSocket *ss, int64_t priority) {
+int varlink_server_add_socket_event_source(sd_varlink_server *s, VarlinkServerSocket *ss) {
         _cleanup_(sd_event_source_unrefp) sd_event_source *es = NULL;
         int r;
 
         assert(s);
         assert(s->event);
         assert(ss);
+        assert(ss->server == s);
         assert(ss->fd >= 0);
         assert(!ss->event_source);
 
@@ -4085,7 +4082,7 @@ int varlink_server_add_socket_event_source(sd_varlink_server *s, VarlinkServerSo
         if (r < 0)
                 return r;
 
-        r = sd_event_source_set_priority(es, priority);
+        r = sd_event_source_set_priority(es, s->event_priority);
         if (r < 0)
                 return r;
 
@@ -4107,13 +4104,14 @@ _public_ int sd_varlink_server_attach_event(sd_varlink_server *s, sd_event *e, i
                         return r;
         }
 
+        s->event_priority = priority;
+
         LIST_FOREACH(sockets, ss, s->sockets) {
-                r = varlink_server_add_socket_event_source(s, ss, priority);
+                r = varlink_server_add_socket_event_source(s, ss);
                 if (r < 0)
                         goto fail;
         }
 
-        s->event_priority = priority;
         return 0;
 
 fail:
index 64868514244999d67d65c3eee8ec4dc468f86afd..39b15e12a1fee24727659cb4dc12af20e654a76a 100644 (file)
@@ -262,4 +262,4 @@ static inline const char* varlink_server_description(sd_varlink_server *s) {
 VarlinkServerSocket* varlink_server_socket_free(VarlinkServerSocket *ss);
 DEFINE_TRIVIAL_CLEANUP_FUNC(VarlinkServerSocket *, varlink_server_socket_free);
 
-int varlink_server_add_socket_event_source(sd_varlink_server *s, VarlinkServerSocket *ss, int64_t priority);
+int varlink_server_add_socket_event_source(sd_varlink_server *s, VarlinkServerSocket *ss);
index 906a1020decaa0271e15c5ba9bbf25d9910074d7..d9199f286959010929e59c5c824dc22819df4028 100644 (file)
@@ -83,7 +83,7 @@ int varlink_server_deserialize_one(sd_varlink_server *s, const char *value, FDSe
                 .fd = fdset_remove(fds, fd),
         };
 
-        r = varlink_server_add_socket_event_source(s, ss, SD_EVENT_PRIORITY_NORMAL);
+        r = varlink_server_add_socket_event_source(s, ss);
         if (r < 0)
                 return varlink_server_log_errno(s, r, "Failed to add VarlinkServerSocket event source to the event loop: %m");