From: Lennart Poettering Date: Wed, 20 Nov 2024 12:13:41 +0000 (+0100) Subject: sd-varlink: fix bug when enqueuing messages with fds asynchronously X-Git-Tag: v257-rc3~20 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7b4b3a8f7b76f266438fafb225b7980db68a276e;p=thirdparty%2Fsystemd.git sd-varlink: fix bug when enqueuing messages with fds asynchronously When determining the poll events to wait for we need to take the queue of pending messages that carry fds into account. Otherwise we might end up not waking up if such an fd-carrying message is enqueued asynchronously (i.e. not from a dispatch callback). --- diff --git a/src/libsystemd/sd-varlink/sd-varlink.c b/src/libsystemd/sd-varlink/sd-varlink.c index c7a8a504f23..150ce4eddab 100644 --- a/src/libsystemd/sd-varlink/sd-varlink.c +++ b/src/libsystemd/sd-varlink/sd-varlink.c @@ -1698,7 +1698,8 @@ _public_ int sd_varlink_get_events(sd_varlink *v) { ret |= EPOLLIN; if (!v->write_disconnected && - v->output_buffer_size > 0) + (v->output_queue || + v->output_buffer_size > 0)) ret |= EPOLLOUT; return ret;