Mesa (master): mesa: Reads must also be done with lock held.
Jose Fonseca
jrfonseca at kemper.freedesktop.org
Fri Mar 6 14:04:20 UTC 2009
Module: Mesa
Branch: master
Commit: 8bbb6b352ad7fabb2cc5ec4b82244d39495e80ac
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8bbb6b352ad7fabb2cc5ec4b82244d39495e80ac
Author: José Fonseca <jfonseca at vmware.com>
Date: Fri Mar 6 14:02:42 2009 +0000
mesa: Reads must also be done with lock held.
Otherwise two threads might think each made the refcount go zero.
---
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 27fc26a..05b19a4 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -1310,6 +1310,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.
@@ -1361,10 +1363,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