Parcourir la source

Merge pull request #20582 from hpvb/fix-mono-mingw

Fix Mono compilation on Windows/Ming
Ignacio Etcheverry il y a 7 ans
Parent
commit
b3919dcb44
2 fichiers modifiés avec 19 ajouts et 10 suppressions
  1. 10 2
      modules/mono/utils/thread_local.cpp
  2. 9 8
      modules/mono/utils/thread_local.h

+ 10 - 2
modules/mono/utils/thread_local.cpp

@@ -63,7 +63,13 @@ struct ThreadLocalStorage::Impl {
 #endif
 	}
 
-	Impl(void (*p_destr_callback_func)(void *)) {
+#ifdef WINDOWS_ENABLED
+#define _CALLBACK_FUNC_ __stdcall
+#else
+#define _CALLBACK_FUNC_
+#endif
+
+	Impl(void _CALLBACK_FUNC_ (*p_destr_callback_func)(void *)) {
 #ifdef WINDOWS_ENABLED
 		dwFlsIndex = FlsAlloc(p_destr_callback_func);
 		ERR_FAIL_COND(dwFlsIndex == FLS_OUT_OF_INDEXES);
@@ -89,10 +95,12 @@ void ThreadLocalStorage::set_value(void *p_value) const {
 	pimpl->set_value(p_value);
 }
 
-void ThreadLocalStorage::alloc(void (*p_destr_callback)(void *)) {
+void ThreadLocalStorage::alloc(void _CALLBACK_FUNC_ (*p_destr_callback)(void *)) {
 	pimpl = memnew(ThreadLocalStorage::Impl(p_destr_callback));
 }
 
+#undef _CALLBACK_FUNC_
+
 void ThreadLocalStorage::free() {
 	memdelete(pimpl);
 	pimpl = NULL;

+ 9 - 8
modules/mono/utils/thread_local.h

@@ -65,12 +65,18 @@
 
 #include "core/typedefs.h"
 
+#ifdef WINDOWS_ENABLED
+#define _CALLBACK_FUNC_ __stdcall
+#else
+#define _CALLBACK_FUNC_
+#endif
+
 struct ThreadLocalStorage {
 
 	void *get_value() const;
 	void set_value(void *p_value) const;
 
-	void alloc(void (*p_dest_callback)(void *));
+	void alloc(void _CALLBACK_FUNC_ (*p_dest_callback)(void *));
 	void free();
 
 private:
@@ -85,17 +91,10 @@ class ThreadLocal {
 
 	T init_val;
 
-#ifdef WINDOWS_ENABLED
-#define _CALLBACK_FUNC_ __stdcall
-#else
-#define _CALLBACK_FUNC_
-#endif
-
 	static void _CALLBACK_FUNC_ destr_callback(void *tls_data) {
 		memdelete(static_cast<T *>(tls_data));
 	}
 
-#undef _CALLBACK_FUNC_
 
 	T *_tls_get_value() const {
 		void *tls_data = storage.get_value();
@@ -156,6 +155,8 @@ private:
 	bool &flag;
 };
 
+#undef _CALLBACK_FUNC_
+
 #define _TLS_RECURSION_GUARD_V_(m_ret)                    \
 	static _THREAD_LOCAL_(bool) _recursion_flag_ = false; \
 	if (_recursion_flag_)                                 \