summaryrefslogtreecommitdiffstats
path: root/include/godot_cpp/core
diff options
context:
space:
mode:
authorDavid Snopek <dsnopek@gmail.com>2024-09-17 14:53:39 -0500
committerDavid Snopek <dsnopek@gmail.com>2024-10-17 09:06:27 -0500
commit91833c852e47a83ed01deb26213b9d3184de736d (patch)
treef5d03c2f87ef31f617d2f458b0b4c05bbead7632 /include/godot_cpp/core
parenta98d41f62bdb8b7aa903e8e37c1faa48fe8fdae8 (diff)
downloadredot-cpp-91833c852e47a83ed01deb26213b9d3184de736d.tar.gz
Avoid `thread_local` on MacOS to prevent issues with hot reload
Diffstat (limited to 'include/godot_cpp/core')
-rw-r--r--include/godot_cpp/core/class_db.hpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/include/godot_cpp/core/class_db.hpp b/include/godot_cpp/core/class_db.hpp
index 85bc0fb..d9dce79 100644
--- a/include/godot_cpp/core/class_db.hpp
+++ b/include/godot_cpp/core/class_db.hpp
@@ -129,6 +129,9 @@ private:
static GDExtensionClassInstancePtr _recreate_instance_func(void *data, GDExtensionObjectPtr obj) {
if constexpr (!std::is_abstract_v<T>) {
#ifdef HOT_RELOAD_ENABLED
+#ifdef _GODOT_CPP_AVOID_THREAD_LOCAL
+ std::lock_guard<std::recursive_mutex> lk(Wrapped::_constructing_mutex);
+#endif
Wrapped::_constructing_recreate_owner = obj;
T *new_instance = (T *)memalloc(sizeof(T));
memnew_placement(new_instance, T);