On Fri, 7 May 2010 14:58:05 -0400, Kristian Høgsberg <[email protected]> wrote:
> resources = clientTable[client->index].resources;
> + eltptr = &clientTable[client->index].elements;
> for (i = 0; i < clientTable[client->index].buckets; i++) {
> for (this = resources[i]; this; this = next) {
> next = this->next;
> if (!type || this->type == type) {
> /* workaround func freeing the type as DRI1 does */
> value = this->value;
> + elements = *eltptr;
> if((*func)(value, this->id, cdata))
> return value;
> + if (*eltptr != elements)
> + next = resources[i]; /* start over */
This one scares me a bit -- what happens if the function *adds* a
resource? You'll rescan the table and call it again with the same
resource.
Everything else looks great; thanks for finding the oldest bug this
year.
--
[email protected]
pgp5N4SWF7pPF.pgp
Description: PGP signature
_______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
