From 17fa8cb6ef4424e4c7cff2439e2d52220f440660 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 3 Jan 2023 18:21:42 +0000 Subject: [PATCH] Add extra mutex to TypePth just in case --- src/ptr_set.cpp | 3 +++ src/types.cpp | 16 ++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/ptr_set.cpp b/src/ptr_set.cpp index 303bde07e..9b8b678f8 100644 --- a/src/ptr_set.cpp +++ b/src/ptr_set.cpp @@ -1,5 +1,7 @@ template struct PtrSetEntry { + static_assert(sizeof(T) == sizeof(void *), "Key size must be pointer size"); + T ptr; MapIndex next; @@ -10,6 +12,7 @@ struct PtrSetEntry { template struct PtrSet { + Slice hashes; Array> entries; }; diff --git a/src/types.cpp b/src/types.cpp index fa7c1d7f7..ec7adab5a 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -748,6 +748,7 @@ gb_internal i64 type_align_of_internal(Type *t, TypePath *path); // IMPORTANT TODO(bill): SHould this TypePath code be removed since type cycle checking is handled much earlier on? struct TypePath { + RecursiveMutex mutex; Array path; // Entity_TypeName; bool failure; }; @@ -758,7 +759,9 @@ gb_internal void type_path_init(TypePath *tp) { } gb_internal void type_path_free(TypePath *tp) { + mutex_lock(&tp->mutex); array_free(&tp->path); + mutex_unlock(&tp->mutex); } gb_internal void type_path_print_illegal_cycle(TypePath *tp, isize start_index) { @@ -787,6 +790,8 @@ gb_internal bool type_path_push(TypePath *tp, Type *t) { } Entity *e = t->Named.type_name; + mutex_lock(&tp->mutex); + for (isize i = 0; i < tp->path.count; i++) { Entity *p = tp->path[i]; if (p == e) { @@ -795,12 +800,19 @@ gb_internal bool type_path_push(TypePath *tp, Type *t) { } array_add(&tp->path, e); + + mutex_unlock(&tp->mutex); + return true; } gb_internal void type_path_pop(TypePath *tp) { - if (tp != nullptr && tp->path.count > 0) { - array_pop(&tp->path); + if (tp != nullptr) { + mutex_lock(&tp->mutex); + if (tp->path.count > 0) { + array_pop(&tp->path); + } + mutex_unlock(&tp->mutex); } }