Give begin_error_block its own recursive mutex

This commit is contained in:
gingerBill
2021-07-29 12:35:11 +01:00
parent af32aba7fc
commit 700624119b
2 changed files with 5 additions and 3 deletions
+1 -1
View File
@@ -79,7 +79,7 @@ void mutex_lock(RecursiveMutex *m) {
gb_mutex_lock(&m->mutex); gb_mutex_lock(&m->mutex);
} }
bool mutex_try_lock(RecursiveMutex *m) { bool mutex_try_lock(RecursiveMutex *m) {
return gb_mutex_try_lock(&m->mutex); return !!gb_mutex_try_lock(&m->mutex);
} }
void mutex_unlock(RecursiveMutex *m) { void mutex_unlock(RecursiveMutex *m) {
gb_mutex_unlock(&m->mutex); gb_mutex_unlock(&m->mutex);
+4 -2
View File
@@ -267,6 +267,7 @@ struct ErrorCollector {
BlockingMutex mutex; BlockingMutex mutex;
BlockingMutex error_out_mutex; BlockingMutex error_out_mutex;
BlockingMutex string_mutex; BlockingMutex string_mutex;
RecursiveMutex block_mutex;
Array<u8> error_buffer; Array<u8> error_buffer;
Array<String> errors; Array<String> errors;
@@ -283,6 +284,7 @@ bool any_errors(void) {
void init_global_error_collector(void) { void init_global_error_collector(void) {
mutex_init(&global_error_collector.mutex); mutex_init(&global_error_collector.mutex);
mutex_init(&global_error_collector.block_mutex);
mutex_init(&global_error_collector.error_out_mutex); mutex_init(&global_error_collector.error_out_mutex);
mutex_init(&global_error_collector.string_mutex); mutex_init(&global_error_collector.string_mutex);
array_init(&global_error_collector.errors, heap_allocator()); array_init(&global_error_collector.errors, heap_allocator());
@@ -357,7 +359,7 @@ AstFile *get_ast_file_from_id(i32 index) {
void begin_error_block(void) { void begin_error_block(void) {
mutex_lock(&global_error_collector.mutex); mutex_lock(&global_error_collector.block_mutex);
global_error_collector.in_block = true; global_error_collector.in_block = true;
} }
@@ -373,7 +375,7 @@ void end_error_block(void) {
} }
global_error_collector.in_block = false; global_error_collector.in_block = false;
mutex_unlock(&global_error_collector.mutex); mutex_unlock(&global_error_collector.block_mutex);
} }