From: Jamey Sharp Date: Thu, 21 Sep 2006 19:13:37 +0000 (-0700) Subject: Refactor XCBPollForEvent with a shorter critical section. X-Git-Url: http://git.demorecorder.com/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=df7fb77d6e22be76ca73f111c586db99a60178ae;p=free-sw%2Fxcb%2Flibxcb Refactor XCBPollForEvent with a shorter critical section. This simplifies the patch for bug #8208 later. --- diff --git a/src/xcb_in.c b/src/xcb_in.c index d4dbb3f..eab8b1d 100644 --- a/src/xcb_in.c +++ b/src/xcb_in.c @@ -380,21 +380,27 @@ XCBGenericEvent *XCBWaitForEvent(XCBConnection *c) XCBGenericEvent *XCBPollForEvent(XCBConnection *c, int *error) { XCBGenericEvent *ret = 0; + int success; pthread_mutex_lock(&c->iolock); - if(error) - *error = 0; /* FIXME: follow X meets Z architecture changes. */ - if(_xcb_in_read(c)) + success = _xcb_in_read(c); + if(success) ret = get_event(c); - else if(error) + pthread_mutex_unlock(&c->iolock); + if(success) + { + if(error) + *error = 0; + return ret; + } + if(error) *error = -1; else { fprintf(stderr, "XCBPollForEvent: I/O error occured, but no handler provided.\n"); abort(); } - pthread_mutex_unlock(&c->iolock); - return ret; + return 0; } XCBGenericError *XCBRequestCheck(XCBConnection *c, XCBVoidCookie cookie)