1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Use BinaryMutex instead of Mutex for StringName.

This commit is contained in:
Lukas Tenbrink
2025-04-09 14:53:16 +02:00
parent 67c96c89cc
commit e57427900f
4 changed files with 15 additions and 12 deletions

View File

@@ -2226,6 +2226,16 @@ void Object::detach_from_objectdb() {
}
}
void Object::assign_class_name_static(const Span<char> &p_name, StringName &r_target) {
static BinaryMutex _mutex;
MutexLock lock(_mutex);
if (r_target) {
// Already assigned while we were waiting for the mutex.
return;
}
r_target = StringName(p_name.ptr(), true);
}
Object::~Object() {
if (script_instance) {
memdelete(script_instance);

View File

@@ -425,7 +425,7 @@ public:
static const StringName &get_class_static() { \
static StringName _class_name_static; \
if (unlikely(!_class_name_static)) { \
StringName::assign_static_unique_class_name(&_class_name_static, #m_class); \
assign_class_name_static(#m_class, _class_name_static); \
} \
return _class_name_static; \
} \
@@ -811,10 +811,12 @@ public:
};
/* TYPE API */
static void assign_class_name_static(const Span<char> &p_name, StringName &r_target);
static const StringName &get_class_static() {
static StringName _class_name_static;
if (unlikely(!_class_name_static)) {
StringName::assign_static_unique_class_name(&_class_name_static, "Object");
assign_class_name_static("Object", _class_name_static);
}
return _class_name_static;
}

View File

@@ -39,7 +39,7 @@ struct StringName::Table {
constexpr static uint32_t TABLE_MASK = TABLE_LEN - 1;
static inline _Data *table[TABLE_LEN];
static inline Mutex mutex;
static inline BinaryMutex mutex;
static inline PagedAllocator<_Data> allocator;
};
@@ -208,13 +208,6 @@ StringName::StringName(const StringName &p_name) {
}
}
void StringName::assign_static_unique_class_name(StringName *ptr, const char *p_name) {
MutexLock lock(Table::mutex);
if (*ptr == StringName()) {
*ptr = StringName(p_name, true);
}
}
StringName::StringName(const char *p_name, bool p_static) {
_data = nullptr;

View File

@@ -178,8 +178,6 @@ public:
StringName(const String &p_name, bool p_static = false);
StringName() {}
static void assign_static_unique_class_name(StringName *ptr, const char *p_name);
#ifdef SIZE_EXTRA
_NO_INLINE_
#else