You've already forked godot
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:
@@ -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() {
|
Object::~Object() {
|
||||||
if (script_instance) {
|
if (script_instance) {
|
||||||
memdelete(script_instance);
|
memdelete(script_instance);
|
||||||
|
|||||||
@@ -425,7 +425,7 @@ public:
|
|||||||
static const StringName &get_class_static() { \
|
static const StringName &get_class_static() { \
|
||||||
static StringName _class_name_static; \
|
static StringName _class_name_static; \
|
||||||
if (unlikely(!_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; \
|
return _class_name_static; \
|
||||||
} \
|
} \
|
||||||
@@ -811,10 +811,12 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* TYPE API */
|
/* TYPE API */
|
||||||
|
static void assign_class_name_static(const Span<char> &p_name, StringName &r_target);
|
||||||
|
|
||||||
static const StringName &get_class_static() {
|
static const StringName &get_class_static() {
|
||||||
static StringName _class_name_static;
|
static StringName _class_name_static;
|
||||||
if (unlikely(!_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;
|
return _class_name_static;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ struct StringName::Table {
|
|||||||
constexpr static uint32_t TABLE_MASK = TABLE_LEN - 1;
|
constexpr static uint32_t TABLE_MASK = TABLE_LEN - 1;
|
||||||
|
|
||||||
static inline _Data *table[TABLE_LEN];
|
static inline _Data *table[TABLE_LEN];
|
||||||
static inline Mutex mutex;
|
static inline BinaryMutex mutex;
|
||||||
static inline PagedAllocator<_Data> allocator;
|
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) {
|
StringName::StringName(const char *p_name, bool p_static) {
|
||||||
_data = nullptr;
|
_data = nullptr;
|
||||||
|
|
||||||
|
|||||||
@@ -178,8 +178,6 @@ public:
|
|||||||
StringName(const String &p_name, bool p_static = false);
|
StringName(const String &p_name, bool p_static = false);
|
||||||
StringName() {}
|
StringName() {}
|
||||||
|
|
||||||
static void assign_static_unique_class_name(StringName *ptr, const char *p_name);
|
|
||||||
|
|
||||||
#ifdef SIZE_EXTRA
|
#ifdef SIZE_EXTRA
|
||||||
_NO_INLINE_
|
_NO_INLINE_
|
||||||
#else
|
#else
|
||||||
|
|||||||
Reference in New Issue
Block a user