aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-01-02 23:56:37 +0000
committergingerBill <bill@gingerbill.org>2023-01-02 23:56:37 +0000
commit670274ad8fc5ba52ea11c2d864d1915e107cc0e2 (patch)
treedc8d320a564cdd8b527991f22e8c68b7ba973a96 /src/check_expr.cpp
parente10fe91ebacdf6256608672a805de9d376e698fe (diff)
More explicit uses of mutexes
Diffstat (limited to 'src/check_expr.cpp')
-rw-r--r--src/check_expr.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index e3c55870c..3c998fc44 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -442,10 +442,11 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E
auto *found = map_get(&info->gen_procs, base_entity->identifier.load());
if (found) {
gen_procs = *found;
- MUTEX_GUARD(&gen_procs->mutex);
+ mutex_lock(&gen_procs->mutex); // @local-mutex
for (Entity *other : gen_procs->procs) {
Type *pt = base_type(other->type);
if (are_types_identical(pt, final_proc_type)) {
+ mutex_unlock(&gen_procs->mutex); // @local-mutex
// @@GPM ////////////////////////////
mutex_unlock(&info->gen_procs_mutex);
/////////////////////////////////////
@@ -456,6 +457,7 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E
return true;
}
}
+ mutex_unlock(&gen_procs->mutex); // @local-mutex
} else {
gen_procs = gb_alloc_item(permanent_allocator(), GenProcsData);
gen_procs->procs.allocator = heap_allocator();
@@ -481,10 +483,12 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E
return false;
}
- MUTEX_GUARD(&gen_procs->mutex);
+ mutex_lock(&gen_procs->mutex); // @local-mutex
for (Entity *other : gen_procs->procs) {
Type *pt = base_type(other->type);
if (are_types_identical(pt, final_proc_type)) {
+ mutex_unlock(&gen_procs->mutex); // @local-mutex
+
if (poly_proc_data) {
poly_proc_data->gen_entity = other;
}
@@ -507,6 +511,7 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E
return true;
}
}
+ mutex_unlock(&gen_procs->mutex); // @local-mutex
}
@@ -566,9 +571,9 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E
}
}
- MUTEX_GUARD_BLOCK(&gen_procs->mutex) {
+ mutex_lock(&gen_procs->mutex); // @local-mutex
array_add(&gen_procs->procs, entity);
- }
+ mutex_unlock(&gen_procs->mutex); // @local-mutex
ProcInfo *proc_info = gb_alloc_item(permanent_allocator(), ProcInfo);
proc_info->file = file;