From: Tatu Frisk <[email protected]>

Assume event queue is empty if another thread is blocking waiting for event.

If one thread was blocking waiting for an event and another thread sent a
reply to the X server, both threads got blocked until an event was
received.

Signed-off-by: Tatu Frisk <[email protected]>
Signed-off-by: Jose Alarcon <[email protected]>
Signed-off-by: Ian Ray <[email protected]>
---
 src/xcb_io.c | 18 +++++++-----------
 1 file changed, 7 insertions(+), 11 deletions(-)

diff --git a/src/xcb_io.c b/src/xcb_io.c
index 649c820..4a8bb27 100644
--- a/src/xcb_io.c
+++ b/src/xcb_io.c
@@ -607,18 +607,14 @@ Status _XReply(Display *dpy, xReply *rep, int extra, Bool 
discard)
                if(dpy->xcb->event_owner == XlibOwnsEventQueue)
                {
                        xcb_generic_reply_t *event;
-                       /* 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);
+
+                       /* 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);
                        }
-                       while((event = poll_for_event(dpy)))
-                               handle_response(dpy, event, True);
                }
 
                req->reply_waiter = 0;
-- 
2.10.1

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to