This is clearly meant to short-circuit the (modestly) expensive resource lookup in LegalNewID. The problem is that long-lived clients will eventually run completely through their XID space and start asking XC-MISC for IDs to reuse. Once that happens, the comparison against expectID will always be true, and we'll no longer catch XID collisions at all.
Signed-off-by: Adam Jackson <[email protected]> --- dix/resource.c | 7 ------- 1 files changed, 0 insertions(+), 7 deletions(-) diff --git a/dix/resource.c b/dix/resource.c index a5737f3..4545a70 100644 --- a/dix/resource.c +++ b/dix/resource.c @@ -173,7 +173,6 @@ typedef struct _ClientResource { int buckets; XID fakeID; XID endFakeID; - XID expectID; } ClientResourceRec; RESTYPE lastResourceType; @@ -332,7 +331,6 @@ InitClientResources(ClientPtr client) clientTable[i].fakeID = client->clientAsMask | (client->index ? SERVER_BIT : SERVER_MINID); clientTable[i].endFakeID = (clientTable[i].fakeID | RESOURCE_ID_MASK) + 1; - clientTable[i].expectID = client->clientAsMask; for (j=0; j<INITBUCKETS; j++) { clientTable[i].resources[j] = NULL; @@ -520,8 +518,6 @@ AddResource(XID id, RESTYPE type, pointer value) res->value = value; *head = res; rrec->elements++; - if (!(id & SERVER_BIT) && (id >= rrec->expectID)) - rrec->expectID = id + 1; CallResourceStateCallback(ResourceStateAdding, res); return TRUE; } @@ -903,9 +899,6 @@ LegalNewID(XID id, ClientPtr client) #endif /* PANORAMIX */ if (client->clientAsMask == (id & ~RESOURCE_ID_MASK)) { - if (clientTable[client->index].expectID <= id) - return TRUE; - rc = dixLookupResourceByClass(&val, id, RC_ANY, serverClient, DixGetAttrAccess); return rc == BadValue; -- 1.7.3.1 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
