Double lock in fbobject.c
_mesa_HashInsertLocked
also set lock on ctx->Shared->FrameBuffers
, maybe _mesa_HashInsertUnlocked
should be used?
else if (!fb) {
_mesa_HashLockMutex(ctx->Shared->FrameBuffers);
fb = ctx->Driver.NewFramebuffer(ctx, id);
if (!fb) {
_mesa_HashUnlockMutex(ctx->Shared->FrameBuffers);
_mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", func);
return NULL;
}
_mesa_HashInsertLocked(ctx->Shared->BufferObjects, id, fb);
_mesa_HashUnlockMutex(ctx->Shared->BufferObjects);
https://gitlab.freedesktop.org/mesa/mesa/-/blob/master/src/mesa/main/fbobject.c#L182-191
also here is Coverity Scan shows double lock
if (fb == &DummyFramebuffer) {
fb = ctx->Driver.NewFramebuffer(ctx, framebuffer);
_mesa_HashLockMutex(ctx->Shared->FrameBuffers);
_mesa_HashInsert(ctx->Shared->FrameBuffers, framebuffer, fb);
_mesa_HashUnlockMutex(ctx->Shared->BufferObjects);
}
}
https://gitlab.freedesktop.org/mesa/mesa/-/blob/master/src/mesa/main/fbobject.c#L4765-4770