From: Mike Yuan Date: Sun, 15 Feb 2026 02:21:01 +0000 (+0100) Subject: varlink-serialize: deserialize to correct event priority X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b166461f82ee68a43897bd0a0babb26fd5d57aa6;p=thirdparty%2Fsystemd.git varlink-serialize: deserialize to correct event priority --- diff --git a/src/libsystemd/sd-varlink/sd-varlink.c b/src/libsystemd/sd-varlink/sd-varlink.c index 4e7467e6d0b..bcb16af89fd 100644 --- a/src/libsystemd/sd-varlink/sd-varlink.c +++ b/src/libsystemd/sd-varlink/sd-varlink.c @@ -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: diff --git a/src/libsystemd/sd-varlink/varlink-internal.h b/src/libsystemd/sd-varlink/varlink-internal.h index 64868514244..39b15e12a1f 100644 --- a/src/libsystemd/sd-varlink/varlink-internal.h +++ b/src/libsystemd/sd-varlink/varlink-internal.h @@ -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); diff --git a/src/shared/varlink-serialize.c b/src/shared/varlink-serialize.c index 906a1020dec..d9199f28695 100644 --- a/src/shared/varlink-serialize.c +++ b/src/shared/varlink-serialize.c @@ -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");