[Mesa-dev] [PATCH 1/2] Fix races during _mesa_HashWalk().

Steinar H. Gunderson steinar+mesa at gunderson.no
Sun Nov 6 11:16:27 UTC 2016


On Sun, Nov 06, 2016 at 09:35:37AM +1100, Timothy Arceri wrote:
> Can you please change this line to say something like. With this change
> we switch to using a recursive mutex, which avoids the deadlock.

Rewording.

> I was a little confused. At first I thought it was already using a
> recursive mutex.

Well, I looked at the fallback (non-C11) implementations, and actually,
they both are recursive no matter what you ask for. But on a C11 compiler,
it looks like it they won't be recursive, indeed.

> One thing that concerns me is that we can now call _mesa_HashRemove
> from the callback in _mesa_HashDeleteAll.
> 
> I think we may need a patch before this one that changes
> _mesa_HashDeleteAll to wrap _mesa_hash_table_remove(table->ht, entry);
> with a deleted entry check otherwise the entry counts will get all
> messed up.
> 
>    /* Check that the cb didn't already delete the entry. If not
>     * remove it.
>     */
>    if (entry->key != table->ht->deleted_key) {
>       _mesa_hash_table_remove(table->ht, entry);
>    }

I'm not sure if I understand this part. Are you concerned that someone will
be writing such code in the future? Can't we just document _mesa_HashDeleteAll
to say that this is illegal?

/* Steinar */
-- 
Homepage: https://www.sesse.net/


More information about the mesa-dev mailing list