]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-varlink: fix bug when enqueuing messages with fds asynchronously
authorLennart Poettering <lennart@poettering.net>
Wed, 20 Nov 2024 12:13:41 +0000 (13:13 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 29 Nov 2024 13:26:56 +0000 (14:26 +0100)
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).

(cherry picked from commit 7b4b3a8f7b76f266438fafb225b7980db68a276e)

src/shared/varlink.c

index 0a6d2c822f5f92eaa2c2d501b82443740fa35241..ec9284792a79d0f2a32842ebe436e7153746264f 100644 (file)
@@ -1708,7 +1708,8 @@ int varlink_get_events(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;