mesa: Use a recursive mutex for the texture lock.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 19 Aug 2014 00:20:20 +0000 (17:20 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Aug 2014 00:31:19 +0000 (17:31 -0700)
This avoids problems with things like meta operations calling functions
that want to take the lock while the lock is already held.  Basically,
the point is to guard against API reentrancy across threads...not to
guard against ourselves.

Dave Airlie opposed this change, but it makes master usable again and no
one proposed a better solution.  We can revert this if/when someone
does.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
Tested-by: Chris Forbes <chrisf@ijw.co.nz>
src/mesa/main/shared.c

index 0189dd2960ace1556defc1f99c3f739e0cbd9aee..7ef932ff0521c4f259da5241b37a8fe9d1c8fb41 100644 (file)
@@ -113,7 +113,7 @@ _mesa_alloc_shared_state(struct gl_context *ctx)
    assert(shared->DefaultTex[TEXTURE_1D_INDEX]->RefCount == 1);
 
    /* Mutex and timestamp for texobj state validation */
-   mtx_init(&shared->TexMutex, mtx_plain);
+   mtx_init(&shared->TexMutex, mtx_recursive);
    shared->TextureStateStamp = 0;
 
    shared->FrameBuffers = _mesa_NewHashTable();