diff options
author | Jamey Sharp <jamey@minilop.net> | 2010-08-24 09:17:38 -0700 |
---|---|---|
committer | Jamey Sharp <jamey@minilop.net> | 2010-08-24 09:29:59 -0700 |
commit | 2040f10a4efa95092bc9409c5b20347989b5f0a2 (patch) | |
tree | b7bbc2218046c3c2c7af07f1e782c5a61cb83538 | |
parent | 35f901a0f2bc3f5bb30dc6ff9d791679c9e84c05 (diff) |
xcb_request_check: Sync even if an event was read for this sequence.
This fixes the test case I have so far for Havoc's report that
xcb_request_check hangs.
Rationale: Since we have a void cookie, request_expected can't have been
set equal to this sequence number when the request was sent; it can only
have become equal due to the arrival of an event or error. If it became
equal due to an event then we still need to sync. If it became equal due
to an error, then request_completed will have been updated, which means
we correctly won't sync.
Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=29599
However, Havoc reports that he can still reproduce the problem, so we
may be revisiting this later.
Reported-by: Havoc Pennington <hp@pobox.com>
Signed-off-by: Jamey Sharp <jamey@minilop.net>
-rw-r--r-- | src/xcb_in.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/xcb_in.c b/src/xcb_in.c index 6dd358c..5a87466 100644 --- a/src/xcb_in.c +++ b/src/xcb_in.c @@ -564,7 +564,7 @@ xcb_generic_error_t *xcb_request_check(xcb_connection_t *c, xcb_void_cookie_t co void *reply; if(c->has_error) return 0; - if(XCB_SEQUENCE_COMPARE_32(cookie.sequence,>,c->in.request_expected) + if(XCB_SEQUENCE_COMPARE_32(cookie.sequence,>=,c->in.request_expected) && XCB_SEQUENCE_COMPARE_32(cookie.sequence,>,c->in.request_completed)) { free(xcb_get_input_focus_reply(c, xcb_get_input_focus(c), &ret)); |