mesa/fbo: lock ctx->Shared->Mutex when allocating renderbuffers
authorMartin Peres <martin.peres@linux.intel.com>
Mon, 30 Mar 2015 07:34:20 +0000 (10:34 +0300)
committerMartin Peres <martin.peres@linux.intel.com>
Wed, 1 Apr 2015 06:36:27 +0000 (09:36 +0300)
This mutex is used to make sure the shared context does not change
while some shared code is looking into it.

Calling BindRenderbufferEXT BindRenderbuffer with a gles context
would not take the mutex before allocating an entry. Commit a34669b
then moved out the allocation out of bind_renderbuffer into
allocate_renderbuffer before using it for the CreateRenderBuffer
entry point. This thus also made this entry point unsafe.

The issue has been hinted by Ilia Mirkin.

Reviewed-by: Brian Paul <brianp@vmware.com>
Signed-off-by: Martin Peres <martin.peres@linux.intel.com>
src/mesa/main/fbobject.c

index 3808b560e816ba46ed832cfc6483008ddfaf49c2..8032585abdf35775d998260970bba7b10c7562df 100644 (file)
@@ -1218,8 +1218,10 @@ allocate_renderbuffer(struct gl_context *ctx, GLuint renderbuffer,
       return NULL;
    }
    assert(newRb->AllocStorage);
+   mtx_lock(&ctx->Shared->Mutex);
    _mesa_HashInsert(ctx->Shared->RenderBuffers, renderbuffer, newRb);
    newRb->RefCount = 1; /* referenced by hash table */
+   mtx_unlock(&ctx->Shared->Mutex);
 
    return newRb;
 }