From eb272f65715c21c38c0dc0f5a84f431851aa87d0 Mon Sep 17 00:00:00 2001 From: Martin Krastev Date: Tue, 15 Jun 2021 12:18:31 -0700 Subject: [PATCH] compiler/glsl: Use mutex lock while freeing up mem_ctx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit builtin_builder::~builtin_builder() and builtin_builder::release() are running into race condition. This leads lightsmark to crash at the end because both calls ralloc_free which mutates the arguments state This patch fixes lightsmark2008 crash Fixes: e4da8b9c331cc3a ("mesa/compiler: rework tear down of builtin/types") Reviewed-by: Charmaine Lee Reviewed-by: Neha Bhende Reviewed-by: Marek Olšák Tested-by: Neha Bhende Part-of: --- src/compiler/glsl/builtin_functions.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/compiler/glsl/builtin_functions.cpp b/src/compiler/glsl/builtin_functions.cpp index 6d700c14bec..9f3b526671e 100644 --- a/src/compiler/glsl/builtin_functions.cpp +++ b/src/compiler/glsl/builtin_functions.cpp @@ -90,6 +90,8 @@ using namespace ir_builder; +static mtx_t builtins_lock = _MTX_INITIALIZER_NP; + /** * Availability predicates: * @{ @@ -1296,7 +1298,15 @@ builtin_builder::builtin_builder() builtin_builder::~builtin_builder() { + mtx_lock(&builtins_lock); + ralloc_free(mem_ctx); + mem_ctx = NULL; + + ralloc_free(shader); + shader = NULL; + + mtx_unlock(&builtins_lock); } ir_function_signature * @@ -7753,7 +7763,6 @@ builtin_builder::_helper_invocation() /* The singleton instance of builtin_builder. */ static builtin_builder builtins; -static mtx_t builtins_lock = _MTX_INITIALIZER_NP; static uint32_t builtin_users = 0; /**