Browse Source

Replace `BlockingMutex` with `RwMutex`

gingerBill 2 years ago
parent
commit
0d059aa797
2 changed files with 15 additions and 15 deletions
  1. 1 1
      src/llvm_backend.hpp
  2. 14 14
      src/llvm_backend_general.cpp

+ 1 - 1
src/llvm_backend.hpp

@@ -143,7 +143,7 @@ struct lbModule {
 	PtrMap<void *, lbStructFieldRemapping> struct_field_remapping; // Key: LLVMTypeRef or Type *
 	PtrMap<void *, lbStructFieldRemapping> struct_field_remapping; // Key: LLVMTypeRef or Type *
 	i32 internal_type_level;
 	i32 internal_type_level;
 
 
-	BlockingMutex values_mutex;
+	RwMutex values_mutex;
 
 
 	PtrMap<Entity *, lbValue> values;           
 	PtrMap<Entity *, lbValue> values;           
 	PtrMap<Entity *, lbAddr>  soa_values;       
 	PtrMap<Entity *, lbAddr>  soa_values;       

+ 14 - 14
src/llvm_backend_general.cpp

@@ -2186,25 +2186,25 @@ gb_internal void lb_ensure_abi_function_type(lbModule *m, lbProcedure *p) {
 
 
 gb_internal void lb_add_entity(lbModule *m, Entity *e, lbValue val) {
 gb_internal void lb_add_entity(lbModule *m, Entity *e, lbValue val) {
 	if (e != nullptr) {
 	if (e != nullptr) {
-		mutex_lock(&m->values_mutex);
+		rw_mutex_lock(&m->values_mutex);
 		map_set(&m->values, e, val);
 		map_set(&m->values, e, val);
-		mutex_unlock(&m->values_mutex);
+		rw_mutex_unlock(&m->values_mutex);
 	}
 	}
 }
 }
 gb_internal void lb_add_member(lbModule *m, String const &name, lbValue val) {
 gb_internal void lb_add_member(lbModule *m, String const &name, lbValue val) {
 	if (name.len > 0) {
 	if (name.len > 0) {
-		mutex_lock(&m->values_mutex);
+		rw_mutex_lock(&m->values_mutex);
 		string_map_set(&m->members, name, val);
 		string_map_set(&m->members, name, val);
-		mutex_unlock(&m->values_mutex);
+		rw_mutex_unlock(&m->values_mutex);
 	}
 	}
 }
 }
 gb_internal void lb_add_procedure_value(lbModule *m, lbProcedure *p) {
 gb_internal void lb_add_procedure_value(lbModule *m, lbProcedure *p) {
-	mutex_lock(&m->values_mutex);
+	rw_mutex_lock(&m->values_mutex);
 	if (p->entity != nullptr) {
 	if (p->entity != nullptr) {
 		map_set(&m->procedure_values, p->value, p->entity);
 		map_set(&m->procedure_values, p->value, p->entity);
 	}
 	}
 	string_map_set(&m->procedures, p->name, p);
 	string_map_set(&m->procedures, p->name, p);
-	mutex_unlock(&m->values_mutex);
+	rw_mutex_unlock(&m->values_mutex);
 }
 }
 
 
 
 
@@ -2549,9 +2549,9 @@ gb_internal lbValue lb_find_ident(lbProcedure *p, lbModule *m, Entity *e, Ast *e
 	}
 	}
 
 
 	lbValue *found = nullptr;
 	lbValue *found = nullptr;
-	mutex_lock(&m->values_mutex);
+	rw_mutex_shared_lock(&m->values_mutex);
 	found = map_get(&m->values, e);
 	found = map_get(&m->values, e);
-	mutex_unlock(&m->values_mutex);
+	rw_mutex_shared_unlock(&m->values_mutex);
 
 
 	if (found) {
 	if (found) {
 
 
@@ -2602,9 +2602,9 @@ gb_internal lbValue lb_find_procedure_value_from_entity(lbModule *m, Entity *e)
 	GB_ASSERT(e != nullptr);
 	GB_ASSERT(e != nullptr);
 
 
 	lbValue *found = nullptr;
 	lbValue *found = nullptr;
-	mutex_lock(&m->values_mutex);
+	rw_mutex_shared_lock(&m->values_mutex);
 	found = map_get(&m->values, e);
 	found = map_get(&m->values, e);
-	mutex_unlock(&m->values_mutex);
+	rw_mutex_shared_unlock(&m->values_mutex);
 	if (found) {
 	if (found) {
 		return *found;
 		return *found;
 	}
 	}
@@ -2623,9 +2623,9 @@ gb_internal lbValue lb_find_procedure_value_from_entity(lbModule *m, Entity *e)
 	lbProcedure *missing_proc = lb_create_procedure(m, e, ignore_body);
 	lbProcedure *missing_proc = lb_create_procedure(m, e, ignore_body);
 	if (ignore_body) {
 	if (ignore_body) {
 		GB_ASSERT(other_module != nullptr);
 		GB_ASSERT(other_module != nullptr);
-		mutex_lock(&other_module->values_mutex);
+		rw_mutex_shared_lock(&other_module->values_mutex);
 		auto *found = map_get(&other_module->values, e);
 		auto *found = map_get(&other_module->values, e);
-		mutex_unlock(&other_module->values_mutex);
+		rw_mutex_shared_unlock(&other_module->values_mutex);
 		if (found == nullptr) {
 		if (found == nullptr) {
 			lbProcedure *missing_proc_in_other_module = lb_create_procedure(other_module, e, false);
 			lbProcedure *missing_proc_in_other_module = lb_create_procedure(other_module, e, false);
 			array_add(&other_module->missing_procedures_to_check, missing_proc_in_other_module);
 			array_add(&other_module->missing_procedures_to_check, missing_proc_in_other_module);
@@ -2702,9 +2702,9 @@ gb_internal lbValue lb_find_value_from_entity(lbModule *m, Entity *e) {
 	}
 	}
 
 
 	lbValue *found = nullptr;
 	lbValue *found = nullptr;
-	mutex_lock(&m->values_mutex);
+	rw_mutex_shared_lock(&m->values_mutex);
 	found = map_get(&m->values, e);
 	found = map_get(&m->values, e);
-	mutex_unlock(&m->values_mutex);
+	rw_mutex_shared_unlock(&m->values_mutex);
 	if (found) {
 	if (found) {
 		return *found;
 		return *found;
 	}
 	}