From 6f5a92dd172c5b0e424499b0c49cca90865859f6 Mon Sep 17 00:00:00 2001
From: Bent Bisballe Nyeng <deva@aasimon.org>
Date: Sat, 23 Jan 2016 23:21:22 +0100
Subject: Possible fix to missing std::mutex in mingw.

---
 src/mutex.cc | 20 ++++++++++----------
 src/mutex.h  |  8 ++------
 2 files changed, 12 insertions(+), 16 deletions(-)

(limited to 'src')

diff --git a/src/mutex.cc b/src/mutex.cc
index 75c7dad..e01bc95 100644
--- a/src/mutex.cc
+++ b/src/mutex.cc
@@ -31,6 +31,7 @@
 #include <windows.h>
 #else
 #include <pthread.h>
+#include <errno.h>
 #endif
 
 struct mutex_private_t {
@@ -67,6 +68,15 @@ Mutex::~Mutex()
 	}
 }
 
+bool Mutex::try_lock()
+{
+#ifdef WIN32
+	return WaitForSingleObject(prv->mutex, 0) == WAIT_OBJECT_0;
+#else
+	return pthread_mutex_trylock(&prv->mutex) != EBUSY;
+#endif
+}
+
 void Mutex::lock()
 {
 #ifdef WIN32
@@ -86,16 +96,6 @@ void Mutex::unlock()
 #endif
 }
 
-#ifdef WIN32
-// Hack: mingw doesn't have std::mutex
-namespace std {
-bool mutex::try_lock()
-{
-	return Mutex::trylock();
-}
-}
-#endif
-
 MutexAutolock::MutexAutolock(Mutex &m)
 	: mutex(m)
 {
diff --git a/src/mutex.h b/src/mutex.h
index 8c71733..4659a07 100644
--- a/src/mutex.h
+++ b/src/mutex.h
@@ -34,7 +34,7 @@ public:
 	Mutex();
 	~Mutex();
 
-	bool trylock();
+	bool try_lock();
 	void lock();
 	void unlock();
 
@@ -45,11 +45,7 @@ private:
 #ifdef WIN32
 // Hack: mingw doesn't have std::mutex
 namespace std {
-class mutex
-	: public Mutex {
-public:
-	bool try_lock();
-};
+	class mutex : public Mutex {};
 }
 #endif
 
-- 
cgit v1.2.3