From 1dd943d7fb5bd374e871436ccf6546327687c761 Mon Sep 17 00:00:00 2001 From: Matt Turner Date: Thu, 30 Jul 2015 11:25:27 -0700 Subject: [PATCH] mesa: Add locking to programs. Reviewed-by: Timothy Arceri Reviewed-by: Brian Paul --- src/mesa/main/mtypes.h | 1 + src/mesa/program/program.c | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 5445d39c560..a872942d2a8 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -1888,6 +1888,7 @@ enum gl_frag_depth_layout */ struct gl_program { + mtx_t Mutex; GLuint Id; GLint RefCount; GLubyte *String; /**< Null-terminated program text */ diff --git a/src/mesa/program/program.c b/src/mesa/program/program.c index 18d6754a99a..e94c1021258 100644 --- a/src/mesa/program/program.c +++ b/src/mesa/program/program.c @@ -226,6 +226,7 @@ init_program_struct(struct gl_program *prog, GLenum target, GLuint id) assert(prog); memset(prog, 0, sizeof(*prog)); + mtx_init(&prog->Mutex, mtx_plain); prog->Id = id; prog->Target = target; prog->RefCount = 1; @@ -418,6 +419,7 @@ _mesa_delete_program(struct gl_context *ctx, struct gl_program *prog) ralloc_free(prog->nir); } + mtx_destroy(&prog->Mutex); free(prog); } @@ -463,17 +465,18 @@ _mesa_reference_program_(struct gl_context *ctx, if (*ptr) { GLboolean deleteFlag; + struct gl_program *oldProg = *ptr; - /*mtx_lock(&(*ptr)->Mutex);*/ - assert((*ptr)->RefCount > 0); - (*ptr)->RefCount--; + mtx_lock(&oldProg->Mutex); + assert(oldProg->RefCount > 0); + oldProg->RefCount--; - deleteFlag = ((*ptr)->RefCount == 0); - /*mtx_lock(&(*ptr)->Mutex);*/ + deleteFlag = (oldProg->RefCount == 0); + mtx_unlock(&oldProg->Mutex); if (deleteFlag) { assert(ctx); - ctx->Driver.DeleteProgram(ctx, *ptr); + ctx->Driver.DeleteProgram(ctx, oldProg); } *ptr = NULL; @@ -481,9 +484,9 @@ _mesa_reference_program_(struct gl_context *ctx, assert(!*ptr); if (prog) { - /*mtx_lock(&prog->Mutex);*/ + mtx_lock(&prog->Mutex); prog->RefCount++; - /*mtx_unlock(&prog->Mutex);*/ + mtx_unlock(&prog->Mutex); } *ptr = prog; -- 2.30.2