Otherwise a client may receive data with an unrelated file
descriptor after calling recvmsg() if its input buffer is not
big enough. In libxcb it may lead to a situation when all
received messages fit the buffer while a message related to
the attached fd is not received yet. libxcb can't find the
corresponding message and fails with XCB_CONN_CLOSED_FDPASSING_FAILED
error.
---
os/io.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/os/io.c b/os/io.c
index b099f0967..f4e80557d 100644
--- a/os/io.c
+++ b/os/io.c
@@ -488,6 +488,9 @@ WriteFdToClient(ClientPtr client, int fd, Bool do_close)
#if XTRANS_SEND_FDS
OsCommPtr oc = (OsCommPtr) client->osPrivate;
+ if (oc->output && oc->output->count > 0)
+ (void) FlushClient(client, oc, (char *) NULL, 0);
+
return _XSERVTransSendFd(oc->trans_conn, fd, do_close);
#else
return -1;
--
2.11.0
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel