Mesa (mesa_7_4_branch): mesa: Reads must also be done with lock held.

Brian Paul brianp at kemper.freedesktop.org
Fri Mar 6 14:51:39 UTC 2009


Module: Mesa
Branch: mesa_7_4_branch
Commit: 6801240205cd607eaa41b54d714fd1deeb4d8e3b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6801240205cd607eaa41b54d714fd1deeb4d8e3b

Author: Brian Paul <brianp at vmware.com>
Date:   Fri Mar  6 07:51:18 2009 -0700

mesa: Reads must also be done with lock held.

Otherwise two threads might think each made the refcount go zero.

(cherry picked from master, commit 8bbb6b352ad7fabb2cc5ec4b82244d39495e80ac)

---

 src/mesa/main/context.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index 98c23bb..bc4ecea 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -1293,6 +1293,8 @@ _mesa_create_context(const GLvisual *visual,
 void
 _mesa_free_context_data( GLcontext *ctx )
 {
+   GLint RefCount;
+
    if (!_mesa_get_current_context()){
       /* No current context, but we may need one in order to delete
        * texture objs, etc.  So temporarily bind the context now.
@@ -1342,10 +1344,10 @@ _mesa_free_context_data( GLcontext *ctx )
 
    /* Shared context state (display lists, textures, etc) */
    _glthread_LOCK_MUTEX(ctx->Shared->Mutex);
-   ctx->Shared->RefCount--;
-   assert(ctx->Shared->RefCount >= 0);
+   RefCount = --ctx->Shared->RefCount;
    _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex);
-   if (ctx->Shared->RefCount == 0) {
+   assert(RefCount >= 0);
+   if (RefCount == 0) {
       /* free shared state */
       free_shared_state( ctx, ctx->Shared );
    }




More information about the mesa-commit mailing list