Handle XC-MISC request failure when allocating new XIDs. (fixes #7001)
authorJamey Sharp <jamey@minilop.net>
Sat, 9 Sep 2006 22:52:37 +0000 (15:52 -0700)
committerJamey Sharp <jamey@minilop.net>
Sat, 9 Sep 2006 22:52:37 +0000 (15:52 -0700)
src/xcb_xid.c

index 7d7f784..1c53b53 100644 (file)
@@ -39,11 +39,16 @@ CARD32 XCBGenerateID(XCBConnection *c)
     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;