diff options
author | Michel Dänzer <michel.daenzer@amd.com> | 2015-06-01 11:04:18 +0900 |
---|---|---|
committer | Uli Schlachter <psychon@znc.in> | 2015-06-12 09:45:16 +0200 |
commit | f85661c3bca97faa72431df92a3867be39a74e23 (patch) | |
tree | c4924eefd49b6d6f9cde0f810c44a8b4fe92d156 | |
parent | 8584c0e09573a29d8ba7050e3d5afd925b4d8d80 (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.c | 1 |
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; } |