From 6feadb006504b809c289041f21ff402738c4ca42 Mon Sep 17 00:00:00 2001 From: Matt Turner Date: Wed, 9 Feb 2022 12:38:41 -0800 Subject: [PATCH] Revert "Fix hanging issue in _XReply" This reverts commit 93a050c3ad2d2264d3880db3791387b1a9bf2e9e. --- src/xcb_io.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/xcb_io.c b/src/xcb_io.c index dff441ff..4be75408 100644 --- a/src/xcb_io.c +++ b/src/xcb_io.c @@ -704,14 +704,18 @@ Status _XReply(Display *dpy, xReply *rep, int extra, Bool discard) if(dpy->xcb->event_owner == XlibOwnsEventQueue) { xcb_generic_reply_t *event; - - /* Assume event queue is empty if another thread is blocking - * waiting for event. */ - if(!dpy->xcb->event_waiter) - { - while((event = poll_for_response(dpy))) - handle_response(dpy, event, True); - } + /* If some thread is already waiting for events, + * it will get the first one. That thread must + * process that event before we can continue. */ + /* FIXME: That event might be after this reply, + * and might never even come--or there might be + * multiple threads trying to get events. */ + while(dpy->xcb->event_waiter) + { /* need braces around ConditionWait */ + ConditionWait(dpy, dpy->xcb->event_notify); + } + while((event = poll_for_event(dpy, True))) + handle_response(dpy, event, True); } req->reply_waiter = 0; -- 2.34.1