summaryrefslogtreecommitdiff
path: root/src/mesa/main/context.c
diff options
context:
space:
mode:
authorJosé Fonseca <jfonseca@vmware.com>2010-02-01 21:22:10 +0000
committerJosé Fonseca <jfonseca@vmware.com>2010-02-09 11:52:02 +0000
commit1c39dbb90cefad8a5a97e75042466d66ea4270bc (patch)
treea3197ce8a5f6228410fe905c7c989d2198a16d1b /src/mesa/main/context.c
parentb750786fb149fb1276187bbbd1c042609e5962aa (diff)
mesa: Always do proper ref counting of shared state.
Diffstat (limited to 'src/mesa/main/context.c')
-rw-r--r--src/mesa/main/context.c24
1 files changed, 4 insertions, 20 deletions
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index 74c6ac4990..fccce51e85 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -835,7 +835,7 @@ _mesa_initialize_context(GLcontext *ctx,
_glthread_UNLOCK_MUTEX(shared->Mutex);
if (!init_attrib_groups( ctx )) {
- _mesa_free_shared_state(ctx, ctx->Shared);
+ _mesa_release_shared_state(ctx, ctx->Shared);
return GL_FALSE;
}
@@ -843,7 +843,7 @@ _mesa_initialize_context(GLcontext *ctx,
ctx->Exec = alloc_dispatch_table();
ctx->Save = alloc_dispatch_table();
if (!ctx->Exec || !ctx->Save) {
- _mesa_free_shared_state(ctx, ctx->Shared);
+ _mesa_release_shared_state(ctx, ctx->Shared);
if (ctx->Exec)
_mesa_free(ctx->Exec);
return GL_FALSE;
@@ -933,8 +933,6 @@ _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.
@@ -988,14 +986,7 @@ _mesa_free_context_data( GLcontext *ctx )
_mesa_free(ctx->Save);
/* Shared context state (display lists, textures, etc) */
- _glthread_LOCK_MUTEX(ctx->Shared->Mutex);
- RefCount = --ctx->Shared->RefCount;
- _glthread_UNLOCK_MUTEX(ctx->Shared->Mutex);
- assert(RefCount >= 0);
- if (RefCount == 0) {
- /* free shared state */
- _mesa_free_shared_state( ctx, ctx->Shared );
- }
+ _mesa_release_shared_state( ctx, ctx->Shared );
/* needs to be after freeing shared state */
_mesa_free_display_list_data(ctx);
@@ -1397,7 +1388,6 @@ _mesa_share_state(GLcontext *ctx, GLcontext *ctxToShare)
{
if (ctx && ctxToShare && ctx->Shared && ctxToShare->Shared) {
struct gl_shared_state *oldSharedState = ctx->Shared;
- GLint RefCount;
ctx->Shared = ctxToShare->Shared;
@@ -1407,13 +1397,7 @@ _mesa_share_state(GLcontext *ctx, GLcontext *ctxToShare)
update_default_objects(ctx);
- _glthread_LOCK_MUTEX(oldSharedState->Mutex);
- RefCount = --oldSharedState->RefCount;
- _glthread_UNLOCK_MUTEX(oldSharedState->Mutex);
-
- if (RefCount == 0) {
- _mesa_free_shared_state(ctx, oldSharedState);
- }
+ _mesa_release_shared_state(ctx, oldSharedState);
return GL_TRUE;
}