X-Git-Url: http://git.demorecorder.com/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fxcb_xid.c;h=7ff0c5fc2454f56b9aad43e4200bbbb89ff01ce2;hb=d79621b25ba6784135b1a3aa51e9561fcf72fe7f;hp=7d7f7843428011f2597686bd4239430791054af0;hpb=47ceed78612d48dcda62cc2686fc527d61abe38b;p=free-sw%2Fxcb%2Flibxcb diff --git a/src/xcb_xid.c b/src/xcb_xid.c index 7d7f784..7ff0c5f 100644 --- a/src/xcb_xid.c +++ b/src/xcb_xid.c @@ -29,21 +29,28 @@ #include "xcb.h" #include "xcbext.h" #include "xcbint.h" -#include "extensions/xc_misc.h" +#include "xc_misc.h" /* Public interface */ -CARD32 XCBGenerateID(XCBConnection *c) +uint32_t xcb_generate_id(xcb_connection_t *c) { - CARD32 ret; + uint32_t 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); + xcb_xc_misc_get_xid_range_reply_t *range; + range = xcb_xc_misc_get_xid_range_reply(c, xcb_xc_misc_get_xid_range(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; @@ -53,7 +60,7 @@ CARD32 XCBGenerateID(XCBConnection *c) /* Private interface */ -int _xcb_xid_init(XCBConnection *c) +int _xcb_xid_init(xcb_connection_t *c) { if(pthread_mutex_init(&c->xid.lock, 0)) return 0; @@ -64,7 +71,7 @@ int _xcb_xid_init(XCBConnection *c) return 1; } -void _xcb_xid_destroy(XCBConnection *c) +void _xcb_xid_destroy(xcb_connection_t *c) { pthread_mutex_destroy(&c->xid.lock); }