From cd577b2eeff3b2e78a85c575d4c1ae544b1b17b4 Mon Sep 17 00:00:00 2001 From: Franz Date: Wed, 15 Jul 2026 23:14:24 +0200 Subject: [PATCH] Shrink lock region of `func_raw_types_mutex` to avoid deadlock. --- src/llvm_backend_general.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index 3fc65a34f..d9a807d18 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -1781,13 +1781,15 @@ gb_internal LLVMTypeRef lb_type_internal_for_procedures_raw(lbModule *m, Type *t GB_ASSERT(type->kind == Type_Proc); mutex_lock(&m->func_raw_types_mutex); - defer (mutex_unlock(&m->func_raw_types_mutex)); LLVMTypeRef *found = map_get(&m->func_raw_types, type); if (found) { + mutex_unlock(&m->func_raw_types_mutex); return *found; } + mutex_unlock(&m->func_raw_types_mutex); + unsigned param_count = 0; if (type->Proc.param_count != 0) { @@ -1896,7 +1898,9 @@ gb_internal LLVMTypeRef lb_type_internal_for_procedures_raw(lbModule *m, Type *t "\n\tFuncTypeCtx: %p\n\tCurrentCtx: %p\n\tGlobalCtx: %p", LLVMGetTypeContext(new_abi_fn_type), m->ctx); + mutex_lock(&m->func_raw_types_mutex); map_set(&m->func_raw_types, type, new_abi_fn_type); + mutex_unlock(&m->func_raw_types_mutex); return new_abi_fn_type; }