Browse Source

Fix mutex when building with no threads.

Fabio Alessandrelli 5 years ago
parent
commit
d96179be75
2 changed files with 21 additions and 9 deletions
  1. 4 0
      core/os/mutex.cpp
  2. 17 9
      core/os/mutex.h

+ 4 - 0
core/os/mutex.cpp

@@ -40,7 +40,11 @@ void _global_unlock() {
 	_global_mutex.unlock();
 	_global_mutex.unlock();
 }
 }
 
 
+#ifndef NO_THREADS
+
 template class MutexImpl<std::recursive_mutex>;
 template class MutexImpl<std::recursive_mutex>;
 template class MutexImpl<std::mutex>;
 template class MutexImpl<std::mutex>;
 template class MutexLock<MutexImpl<std::recursive_mutex> >;
 template class MutexLock<MutexImpl<std::recursive_mutex> >;
 template class MutexLock<MutexImpl<std::mutex> >;
 template class MutexLock<MutexImpl<std::mutex> >;
+
+#endif

+ 17 - 9
core/os/mutex.h

@@ -71,9 +71,22 @@ public:
 	}
 	}
 };
 };
 
 
+using Mutex = MutexImpl<std::recursive_mutex>; // Recursive, for general use
+using BinaryMutex = MutexImpl<std::mutex>; // Non-recursive, handle with care
+
+extern template class MutexImpl<std::recursive_mutex>;
+extern template class MutexImpl<std::mutex>;
+extern template class MutexLock<MutexImpl<std::recursive_mutex> >;
+extern template class MutexLock<MutexImpl<std::mutex> >;
+
 #else
 #else
 
 
-template <class StdMutexType>
+class FakeMutex {
+
+	FakeMutex(){};
+};
+
+template <class MutexT>
 class MutexImpl {
 class MutexImpl {
 public:
 public:
 	_ALWAYS_INLINE_ void lock() const {}
 	_ALWAYS_INLINE_ void lock() const {}
@@ -87,14 +100,9 @@ public:
 	explicit MutexLock(const MutexT &p_mutex) {}
 	explicit MutexLock(const MutexT &p_mutex) {}
 };
 };
 
 
-#endif // !NO_THREADS
-
-using Mutex = MutexImpl<std::recursive_mutex>; // Recursive, for general use
-using BinaryMutex = MutexImpl<std::mutex>; // Non-recursive, handle with care
+using Mutex = MutexImpl<FakeMutex>;
+using BinaryMutex = MutexImpl<FakeMutex>; // Non-recursive, handle with care
 
 
-extern template class MutexImpl<std::recursive_mutex>;
-extern template class MutexImpl<std::mutex>;
-extern template class MutexLock<MutexImpl<std::recursive_mutex> >;
-extern template class MutexLock<MutexImpl<std::mutex> >;
+#endif // !NO_THREADS
 
 
 #endif
 #endif