From 8ac43f4733daa46c43a7ad15a6da9bd539544b52 Mon Sep 17 00:00:00 2001 From: aaronp64 Date: Wed, 26 Nov 2025 15:01:49 -0500 Subject: [PATCH] Make Variant::get_type_by_name HashMap initialization thread-safe Updated Variant::get_type_by_name to call separate function for static HashMap initialization, which includes adding the initial key/value pairs. --- core/variant/variant.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/core/variant/variant.cpp b/core/variant/variant.cpp index 9077a3140c0..2b05c84cd8b 100644 --- a/core/variant/variant.cpp +++ b/core/variant/variant.cpp @@ -174,13 +174,16 @@ String Variant::get_type_name(Variant::Type p_type) { return ""; } -Variant::Type Variant::get_type_by_name(const String &p_type_name) { - static HashMap type_names; - if (unlikely(type_names.is_empty())) { - for (int i = 0; i < VARIANT_MAX; i++) { - type_names[get_type_name((Type)i)] = (Type)i; - } +static HashMap _init_type_name_map() { + HashMap type_names; + for (int i = 0; i < Variant::VARIANT_MAX; i++) { + type_names[Variant::get_type_name((Variant::Type)i)] = (Variant::Type)i; } + return type_names; +} + +Variant::Type Variant::get_type_by_name(const String &p_type_name) { + static HashMap type_names = _init_type_name_map(); const Type *ptr = type_names.getptr(p_type_name); return (ptr == nullptr) ? VARIANT_MAX : *ptr;