aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/check_expr.cpp9
-rw-r--r--src/checker.cpp1
-rw-r--r--src/thread_pool.cpp2
3 files changed, 5 insertions, 7 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index 65a411dc1..e3c55870c 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -439,7 +439,6 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E
// @@GPM //////////////////////////
mutex_lock(&info->gen_procs_mutex);
///////////////////////////////////
-
auto *found = map_get(&info->gen_procs, base_entity->identifier.load());
if (found) {
gen_procs = *found;
@@ -462,6 +461,9 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E
gen_procs->procs.allocator = heap_allocator();
map_set(&info->gen_procs, base_entity->identifier.load(), gen_procs);
}
+ // @@GPM ////////////////////////////
+ mutex_unlock(&info->gen_procs_mutex);
+ /////////////////////////////////////
{
// LEAK TODO(bill): This is technically a memory leak as it has to generate the type twice
@@ -475,11 +477,6 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E
// LEAK TODO(bill): Cloning this AST may be leaky
Ast *cloned_proc_type_node = clone_ast(pt->node);
success = check_procedure_type(&nctx, final_proc_type, cloned_proc_type_node, &operands);
-
- // @@GPM ////////////////////////////
- mutex_unlock(&info->gen_procs_mutex);
- /////////////////////////////////////
-
if (!success) {
return false;
}
diff --git a/src/checker.cpp b/src/checker.cpp
index c2cd1163a..ccd0f3627 100644
--- a/src/checker.cpp
+++ b/src/checker.cpp
@@ -51,6 +51,7 @@ gb_internal bool check_rtti_type_disallowed(Ast *expr, Type *type, char const *f
gb_internal void scope_reset(Scope *scope) {
if (scope == nullptr) return;
+ MUTEX_GUARD(&scope->mutex);
scope->head_child.store(nullptr, std::memory_order_relaxed);
string_map_clear(&scope->elements);
ptr_set_clear(&scope->imported);
diff --git a/src/thread_pool.cpp b/src/thread_pool.cpp
index b89e00454..07ab3d323 100644
--- a/src/thread_pool.cpp
+++ b/src/thread_pool.cpp
@@ -167,7 +167,7 @@ gb_internal THREAD_PROC(thread_pool_thread_proc) {
idx = (idx + 1) % cast(usize)pool->threads.count;
Thread *thread = &pool->threads.data[idx];
- WorkerTask task, another_task;
+ WorkerTask task;
if (!thread_pool_queue_pop(thread, &task)) {
continue;
}