From dbf189e28f99f2ff83ae11f8e88ab6cbe04c4ce0 Mon Sep 17 00:00:00 2001 From: Lukas Tenbrink Date: Wed, 15 Jan 2025 21:20:02 +0100 Subject: [PATCH] Lock the `StringName::mutex` after hashing the string, to spend less time hoarding it unnecessarily. --- core/string/string_name.cpp | 46 +++++++++++++++---------------------- 1 file changed, 18 insertions(+), 28 deletions(-) diff --git a/core/string/string_name.cpp b/core/string/string_name.cpp index 2d3c376d0cbe..a0c225d28eb3 100644 --- a/core/string/string_name.cpp +++ b/core/string/string_name.cpp @@ -269,12 +269,10 @@ StringName::StringName(const char *p_name, bool p_static) { return; //empty, ignore } - MutexLock lock(mutex); - - uint32_t hash = String::hash(p_name); - - uint32_t idx = hash & STRING_TABLE_MASK; + const uint32_t hash = String::hash(p_name); + const uint32_t idx = hash & STRING_TABLE_MASK; + MutexLock lock(mutex); _data = _table[idx]; while (_data) { @@ -328,12 +326,10 @@ StringName::StringName(const StaticCString &p_static_string, bool p_static) { ERR_FAIL_COND(!p_static_string.ptr || !p_static_string.ptr[0]); - MutexLock lock(mutex); - - uint32_t hash = String::hash(p_static_string.ptr); - - uint32_t idx = hash & STRING_TABLE_MASK; + const uint32_t hash = String::hash(p_static_string.ptr); + const uint32_t idx = hash & STRING_TABLE_MASK; + MutexLock lock(mutex); _data = _table[idx]; while (_data) { @@ -388,11 +384,10 @@ StringName::StringName(const String &p_name, bool p_static) { return; } - MutexLock lock(mutex); - - uint32_t hash = p_name.hash(); - uint32_t idx = hash & STRING_TABLE_MASK; + const uint32_t hash = p_name.hash(); + const uint32_t idx = hash & STRING_TABLE_MASK; + MutexLock lock(mutex); _data = _table[idx]; while (_data) { @@ -446,11 +441,10 @@ StringName StringName::search(const char *p_name) { return StringName(); } - MutexLock lock(mutex); - - uint32_t hash = String::hash(p_name); - uint32_t idx = hash & STRING_TABLE_MASK; + const uint32_t hash = String::hash(p_name); + const uint32_t idx = hash & STRING_TABLE_MASK; + MutexLock lock(mutex); _Data *_data = _table[idx]; while (_data) { @@ -482,12 +476,10 @@ StringName StringName::search(const char32_t *p_name) { return StringName(); } - MutexLock lock(mutex); - - uint32_t hash = String::hash(p_name); - - uint32_t idx = hash & STRING_TABLE_MASK; + const uint32_t hash = String::hash(p_name); + const uint32_t idx = hash & STRING_TABLE_MASK; + MutexLock lock(mutex); _Data *_data = _table[idx]; while (_data) { @@ -508,12 +500,10 @@ StringName StringName::search(const char32_t *p_name) { StringName StringName::search(const String &p_name) { ERR_FAIL_COND_V(p_name.is_empty(), StringName()); - MutexLock lock(mutex); - - uint32_t hash = p_name.hash(); - - uint32_t idx = hash & STRING_TABLE_MASK; + const uint32_t hash = p_name.hash(); + const uint32_t idx = hash & STRING_TABLE_MASK; + MutexLock lock(mutex); _Data *_data = _table[idx]; while (_data) {