v2: More aggressive loop rewrite pointed out by Daniel.
Signed-off-by: Adam Jackson <[email protected]>
---
dix/resource.c | 28 ++++++++++++----------------
1 files changed, 12 insertions(+), 16 deletions(-)
diff --git a/dix/resource.c b/dix/resource.c
index 6bd2403..ed8cc35 100644
--- a/dix/resource.c
+++ b/dix/resource.c
@@ -380,9 +380,8 @@ void
GetXIDRange(int client, Bool server, XID *minp, XID *maxp)
{
XID id, maxid;
- ResourcePtr *resp;
- ResourcePtr res;
int i;
+ ResourcePtr res;
XID goodid;
id = (Mask)client << CLIENTOFFSET;
@@ -390,20 +389,17 @@ GetXIDRange(int client, Bool server, XID *minp, XID *maxp)
id |= client ? SERVER_BIT : SERVER_MINID;
maxid = id | RESOURCE_ID_MASK;
goodid = 0;
- for (resp = clientTable[client].resources, i = clientTable[client].buckets;
- --i >= 0;)
- {
- for (res = *resp++; res; res = res->next)
- {
- if ((res->id < id) || (res->id > maxid))
- continue;
- if (((res->id - id) >= (maxid - res->id)) ?
- (goodid = AvailableID(client, id, res->id - 1, goodid)) :
- !(goodid = AvailableID(client, res->id + 1, maxid, goodid)))
- maxid = res->id - 1;
- else
- id = res->id + 1;
- }
+
+ for (i = 0; i < clientTable[client].buckets; i++) {
+ res = clientTable[client].resources[i];
+ if ((res->id < id) || (res->id > maxid))
+ continue;
+ if (((res->id - id) >= (maxid - res->id)) ?
+ (goodid = AvailableID(client, id, res->id - 1, goodid)) :
+ !(goodid = AvailableID(client, res->id + 1, maxid, goodid)))
+ maxid = res->id - 1;
+ else
+ id = res->id + 1;
}
if (id > maxid)
id = maxid = 0;
--
1.7.3.4
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel