X-Git-Url: http://git.demorecorder.com/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fxcb_in.c;h=973a0d2fe097da5e2cdeca301492c672d9bd7bc2;hb=29f9fe0fc805a1ec6860f167a45664cc1cf0c769;hp=cacb22010e1b23f7d59df89ebc7064abd3d5a254;hpb=ed823bf65192a72f8c3060698c9bded9f77d49c2;p=free-sw%2Fxcb%2Flibxcb diff --git a/src/xcb_in.c b/src/xcb_in.c index cacb220..973a0d2 100644 --- a/src/xcb_in.c +++ b/src/xcb_in.c @@ -133,7 +133,7 @@ static int read_packet(XCBConnection *c) length += genrep.length * 4; } - buf = malloc(length); + buf = malloc(length + (genrep.response_type == 1 ? 0 : sizeof(CARD32))); if(!buf) return 0; if(_xcb_in_read_block(c, buf, length) <= 0) @@ -142,6 +142,9 @@ static int read_packet(XCBConnection *c) return 0; } + if(genrep.response_type != 1) + ((XCBGenericEvent *) buf)->full_sequence = c->in.request_read; + /* reply, or checked error */ if(genrep.response_type == 1 || (genrep.response_type == 0 && pend && (pend->flags & XCB_REQUEST_CHECKED))) { @@ -235,6 +238,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. */