|
|
@@ -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; |
|
|
|
} |