Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=wipv.git;a=commitdiff;h=d7cba069a6cbe4e67a3d9d102ed7aca52c190801
commit d7cba069a6cbe4e67a3d9d102ed7aca52c190801 Author: bouleetbil <bouleet...@frogdev.info> Date: Thu Jul 1 15:08:25 2010 +0000 xorg-server-1.8.2-1-i686 *drop useless patch diff --git a/source/x11/xorg-server/FixFreeResource.diff b/source/x11/xorg-server/FixFreeResource.diff deleted file mode 100644 index 3a81a01..0000000 --- a/source/x11/xorg-server/FixFreeResource.diff +++ /dev/null @@ -1,82 +0,0 @@ -From 6d7ba5e0fcb5d1bce6bb213dec009f3a0f802d26 Mon Sep 17 00:00:00 2001 -From: Kristian Høgsberg <k...@bitplanet.net> -Date: Sat, 01 May 2010 17:07:46 +0000 -Subject: dix: Update element count in FreeResource*() - -FreeResource() keeps clientTable[cid].elements up to date with the -number of resources allocated to the client. The other free -resource functions (FreeResourceByType(), -FreeClientNeverRetainResources() and FreeClientResources()) don't -maintain this invariant. - -Typically, the only consequence is that the element count is too high -and we end up allocating the hash table bigger than necessary. However, -FreeResource() also relies on the element count to restart the search if -the list of resources has been changed during a resource destruction -callback. Since FreeResourceByType() doesn't update the count, if we call -that from a resource destruction callback from FreeResource(), the -loop isn't restarted and we end up following an invalid next pointer. - -Furthermore, LookupClientResourceComplex() and -FreeClientNeverRetainResources() don't use the element count to detect -if a callback deleted a resource and may end up following an invalid -next pointer if the resource system is called into recursively. - -Signed-off-by: Kristian Høgsberg <k...@bitplanet.net> -Reviewed-by: Keith Packard <kei...@keithp.com> ---- -diff --git a/dix/resource.c b/dix/resource.c -index 91d0cfb..ab3762e 100644 ---- a/dix/resource.c -+++ b/dix/resource.c -@@ -589,6 +589,7 @@ FreeResourceByType(XID id, RESTYPE type, Bool skipFree) - res->value, TypeNameString(res->type)); - #endif - *prev = res->next; -+ clientTable[cid].elements--; - - CallResourceStateCallback(ResourceStateFreeing, res); - -@@ -734,12 +735,14 @@ FreeClientNeverRetainResources(ClientPtr client) - ResourcePtr *resources; - ResourcePtr this; - ResourcePtr *prev; -- int j; -+ int j, elements; -+ int *eltptr; - - if (!client) - return; - - resources = clientTable[client->index].resources; -+ eltptr = &clientTable[client->index].elements; - for (j=0; j < clientTable[client->index].buckets; j++) - { - prev = &resources[j]; -@@ -753,11 +756,15 @@ FreeClientNeverRetainResources(ClientPtr client) - this->value, TypeNameString(this->type)); - #endif - *prev = this->next; -+ clientTable[client->index].elements--; - - CallResourceStateCallback(ResourceStateFreeing, this); - -+ elements = *eltptr; - (*DeleteFuncs[rtype & TypeMask])(this->value, this->id); - xfree(this); -+ if (*eltptr != elements) -+ prev = &resources[j]; /* prev may no longer be valid */ - } - else - prev = &this->next; -@@ -804,6 +811,7 @@ FreeClientResources(ClientPtr client) - this->value, TypeNameString(this->type)); - #endif - *head = this->next; -+ clientTable[client->index].elements--; - - CallResourceStateCallback(ResourceStateFreeing, this); - --- -cgit v0.8.3-6-g21f6 -
_______________________________________________ Frugalware-git mailing list Frugalware-git@frugalware.org http://frugalware.org/mailman/listinfo/frugalware-git