mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 07:38:48 +00:00
More thread contention removal
This commit is contained in:
+1
-1
@@ -7886,8 +7886,8 @@ gb_internal CallArgumentError check_polymorphic_record_type(CheckerContext *c, O
|
|||||||
GenTypesData *found_gen_types = ensure_polymorphic_record_entity_has_gen_types(c, original_type);
|
GenTypesData *found_gen_types = ensure_polymorphic_record_entity_has_gen_types(c, original_type);
|
||||||
|
|
||||||
mutex_lock(&found_gen_types->mutex);
|
mutex_lock(&found_gen_types->mutex);
|
||||||
defer (mutex_unlock(&found_gen_types->mutex));
|
|
||||||
Entity *found_entity = find_polymorphic_record_entity(found_gen_types, param_count, ordered_operands);
|
Entity *found_entity = find_polymorphic_record_entity(found_gen_types, param_count, ordered_operands);
|
||||||
|
mutex_unlock(&found_gen_types->mutex);
|
||||||
|
|
||||||
if (found_entity) {
|
if (found_entity) {
|
||||||
operand->mode = Addressing_Type;
|
operand->mode = Addressing_Type;
|
||||||
|
|||||||
+1
-1
@@ -417,7 +417,7 @@ struct GenProcsData {
|
|||||||
|
|
||||||
struct GenTypesData {
|
struct GenTypesData {
|
||||||
Array<Entity *> types;
|
Array<Entity *> types;
|
||||||
RecursiveMutex mutex;
|
BlockingMutex mutex;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Defineable {
|
struct Defineable {
|
||||||
|
|||||||
+9
-1
@@ -1,5 +1,7 @@
|
|||||||
#include "parser_pos.cpp"
|
#include "parser_pos.cpp"
|
||||||
|
|
||||||
|
gb_global std::atomic<bool> g_parsing_done;
|
||||||
|
|
||||||
gb_internal bool in_vet_packages(AstFile *file) {
|
gb_internal bool in_vet_packages(AstFile *file) {
|
||||||
if (file == nullptr) {
|
if (file == nullptr) {
|
||||||
return true;
|
return true;
|
||||||
@@ -176,7 +178,11 @@ gb_internal Ast *clone_ast(Ast *node, AstFile *f) {
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
if (f == nullptr) {
|
if (f == nullptr) {
|
||||||
f = node->thread_safe_file();
|
if (g_parsing_done.load(std::memory_order_relaxed)) {
|
||||||
|
f = node->file();
|
||||||
|
} else {
|
||||||
|
f = node->thread_safe_file();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Ast *n = alloc_ast_node(f, node->kind);
|
Ast *n = alloc_ast_node(f, node->kind);
|
||||||
gb_memmove(n, node, ast_node_size(node->kind));
|
gb_memmove(n, node, ast_node_size(node->kind));
|
||||||
@@ -6924,6 +6930,8 @@ gb_internal ParseFileError parse_packages(Parser *p, String init_filename) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_parsing_done.store(true, std::memory_order_relaxed);
|
||||||
|
|
||||||
return ParseFile_None;
|
return ParseFile_None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user