X-Git-Url: http://git.demorecorder.com/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fxcb_in.c;h=ea851c7d9c3d616ecd562deeb4caa90c94b71dd2;hb=6fb661f3ff2fca342b4ea76d5a583c5e4f53e076;hp=cf7dbe79cc6f61839266718786b7f0b605da6a49;hpb=255c21b17f61147388bab6e1d42623a008a4a8d2;p=free-sw%2Fxcb%2Flibxcb diff --git a/src/xcb_in.c b/src/xcb_in.c index cf7dbe7..ea851c7 100644 --- a/src/xcb_in.c +++ b/src/xcb_in.c @@ -91,6 +91,8 @@ static int read_packet(XCBConnection *c) c->in.request_read = (lastread & 0xffff0000) | genrep.sequence; if(c->in.request_read < lastread) c->in.request_read += 0x10000; + if(c->in.request_read > c->in.request_expected) + c->in.request_expected = c->in.request_read; if(c->in.request_read != lastread) { @@ -141,6 +143,11 @@ static int read_packet(XCBConnection *c) free(buf); return 0; } + if(pend && (pend->flags & XCB_REQUEST_DISCARD_REPLY)) + { + free(buf); + return 1; + } if(genrep.response_type != 1) ((XCBGenericEvent *) buf)->full_sequence = c->in.request_read; @@ -238,6 +245,10 @@ void *XCBWaitForReply(XCBConnection *c, unsigned int request, XCBGenericError ** if(e) *e = 0; + /* If an error occurred when issuing the request, fail immediately. */ + if(!request) + return 0; + pthread_mutex_lock(&c->iolock); /* If this request has not been written yet, write it. */