Skip to content

Commit

Permalink
Merge pull request godotengine#101606 from Ivorforce/stringname-lock-…
Browse files Browse the repository at this point in the history
…late

Lock the `StringName::mutex` after hashing the string, to spend less time hoarding it unnecessarily.
  • Loading branch information
Repiteo committed Jan 16, 2025
2 parents 0c0c45d + dbf189e commit ce88021
Showing 1 changed file with 18 additions and 28 deletions.
46 changes: 18 additions & 28 deletions core/string/string_name.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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) {
Expand All @@ -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) {
Expand Down

0 comments on commit ce88021

Please sign in to comment.