Refactor XCBPollForEvent with a shorter critical section.

This simplifies the patch for bug #8208 later.
This commit is contained in:
Jamey Sharp 2006-09-21 12:13:37 -07:00
parent b08ca2b4b4
commit df7fb77d6e

View File

@ -380,21 +380,27 @@ XCBGenericEvent *XCBWaitForEvent(XCBConnection *c)
XCBGenericEvent *XCBPollForEvent(XCBConnection *c, int *error) XCBGenericEvent *XCBPollForEvent(XCBConnection *c, int *error)
{ {
XCBGenericEvent *ret = 0; XCBGenericEvent *ret = 0;
int success;
pthread_mutex_lock(&c->iolock); pthread_mutex_lock(&c->iolock);
if(error)
*error = 0;
/* FIXME: follow X meets Z architecture changes. */ /* FIXME: follow X meets Z architecture changes. */
if(_xcb_in_read(c)) success = _xcb_in_read(c);
if(success)
ret = get_event(c); ret = get_event(c);
else if(error) pthread_mutex_unlock(&c->iolock);
if(success)
{
if(error)
*error = 0;
return ret;
}
if(error)
*error = -1; *error = -1;
else else
{ {
fprintf(stderr, "XCBPollForEvent: I/O error occured, but no handler provided.\n"); fprintf(stderr, "XCBPollForEvent: I/O error occured, but no handler provided.\n");
abort(); abort();
} }
pthread_mutex_unlock(&c->iolock); return 0;
return ret;
} }
XCBGenericError *XCBRequestCheck(XCBConnection *c, XCBVoidCookie cookie) XCBGenericError *XCBRequestCheck(XCBConnection *c, XCBVoidCookie cookie)