summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichel Dänzer <michel.daenzer@amd.com>2015-06-01 11:04:18 +0900
committerUli Schlachter <psychon@znc.in>2015-09-05 14:56:45 +0200
commita31c295870f2812cb2ce4cff351e2c0a3b144661 (patch)
tree005491db74b85faf6639fed0f58f4a584b376bdc
parent0ba6fe9b4eaa70383cd2ee066dfb3f1e67efeb83 (diff)
Call _xcb_wake_up_next_reader from xcb_wait_for_special_event
All functions calling _xcb_conn_wait() must make sure that waiting readers are woken up when we read a reply or event that they are waiting for. xcb_wait_for_special_event() did not do so. This adds the missing call to_xcb_in_wake_up_next_reader(). Fixes deadlock when waiting for a special event and concurrently processing the display connection queue in another thread. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=84252 Tested-by: Thomas Daede <bztdlinux@gmail.com> Tested-by: Clément Guérin <geecko.dev@free.fr> Reviewed-by: Uli Schlachter <psychon@znc.in> Signed-off-by: Michel Dänzer <michel@daenzer.net> Signed-off-by: Uli Schlachter <psychon@znc.in>
-rw-r--r--src/xcb_in.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/xcb_in.c b/src/xcb_in.c
index 623a0a8..322bed8 100644
--- a/src/xcb_in.c
+++ b/src/xcb_in.c
@@ -761,6 +761,7 @@ xcb_generic_event_t *xcb_wait_for_special_event(xcb_connection_t *c,
if(!_xcb_conn_wait(c, &se->special_event_cond, 0, 0))
break;
+ _xcb_in_wake_up_next_reader(c);
pthread_mutex_unlock(&c->iolock);
return event;
}