X-Git-Url: http://git.demorecorder.com/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fxcb_xid.c;h=a2e7dec5450120e68f507925d884ad5371987c37;hb=79e3227022ae3d66f9f3806d231fdeec2a06cc6b;hp=7d7f7843428011f2597686bd4239430791054af0;hpb=47ceed78612d48dcda62cc2686fc527d61abe38b;p=free-sw%2Fxcb%2Flibxcb diff --git a/src/xcb_xid.c b/src/xcb_xid.c index 7d7f784..a2e7dec 100644 --- a/src/xcb_xid.c +++ b/src/xcb_xid.c @@ -36,14 +36,21 @@ CARD32 XCBGenerateID(XCBConnection *c) { CARD32 ret; + if(c->has_error) + return -1; pthread_mutex_lock(&c->xid.lock); if(c->xid.last == c->xid.max) { - XCBXCMiscGetXIDRangeRep *range; - range = XCBXCMiscGetXIDRangeReply(c, XCBXCMiscGetXIDRange(c), 0); - c->xid.last = range->start_id; - c->xid.max = range->start_id + (range->count - 1) * c->xid.inc; - free(range); + XCBXCMiscGetXIDRangeRep *range; + range = XCBXCMiscGetXIDRangeReply(c, XCBXCMiscGetXIDRange(c), 0); + if(!range) + { + pthread_mutex_unlock(&c->xid.lock); + return -1; + } + c->xid.last = range->start_id; + c->xid.max = range->start_id + (range->count - 1) * c->xid.inc; + free(range); } ret = c->xid.last | c->xid.base; c->xid.last += c->xid.inc;