From 46fd114e9a4e05b74576dce682e24357363298e7 Mon Sep 17 00:00:00 2001
From: ShadowNinja <shadowninja@minetest.net>
Date: Mon, 7 Mar 2016 16:55:32 -0500
Subject: [PATCH] Fix race on thread creation

This often broke the threading tests on OSX.
---
 src/threading/thread.cpp | 12 +-----------
 src/threading/thread.h   | 18 ++++++++++++++++--
 2 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/src/threading/thread.cpp b/src/threading/thread.cpp
index 8688c4cbf..ecf8563f1 100644
--- a/src/threading/thread.cpp
+++ b/src/threading/thread.cpp
@@ -116,9 +116,7 @@ bool Thread::start()
 #if USE_CPP11_THREADS
 
 	try {
-		m_thread_obj    = new std::thread(threadProc, this);
-		m_thread_id     = m_thread_obj->get_id();
-		m_thread_handle = m_thread_obj->native_handle();
+		m_thread_obj = new std::thread(threadProc, this);
 	} catch (const std::system_error &e) {
 		return false;
 	}
@@ -135,8 +133,6 @@ bool Thread::start()
 	if (status)
 		return false;
 
-	m_thread_id = m_thread_handle;
-
 #endif
 
 	while (!m_running)
@@ -234,12 +230,6 @@ bool Thread::getReturnValue(void **ret)
 }
 
 
-bool Thread::isCurrentThread()
-{
-	return thr_is_current_thread(m_thread_id);
-}
-
-
 #if USE_CPP11_THREADS || USE_POSIX_THREADS
 void *Thread::threadProc(void *param)
 #elif defined(_WIN32_WCE)
diff --git a/src/threading/thread.h b/src/threading/thread.h
index 6a24afffb..10732c442 100644
--- a/src/threading/thread.h
+++ b/src/threading/thread.h
@@ -90,12 +90,22 @@ class Thread {
 	/*
 	 * Returns true if the calling thread is this Thread object.
 	 */
-	bool isCurrentThread();
+	bool isCurrentThread() { return thr_is_current_thread(getThreadId()); }
 
 	inline bool isRunning() { return m_running; }
 	inline bool stopRequested() { return m_request_stop; }
+
+#if USE_CPP11_THREADS
+	inline threadid_t getThreadId() { return m_thread_obj->get_id(); }
+	inline threadhandle_t getThreadHandle() { return m_thread_obj->native_handle(); }
+#else
+#  if USE_WIN_THREADS
 	inline threadid_t getThreadId() { return m_thread_id; }
+#  else
+	inline threadid_t getThreadId() { return m_thread_handle; }
+#  endif
 	inline threadhandle_t getThreadHandle() { return m_thread_handle; }
+#endif
 
 	/*
 	 * Gets the thread return value.
@@ -147,8 +157,12 @@ class Thread {
 	Atomic<bool> m_running;
 	Mutex m_mutex;
 
-	threadid_t m_thread_id;
+#if !USE_CPP11_THREADS
 	threadhandle_t m_thread_handle;
+#if _WIN32
+	threadid_t m_thread_id;
+#endif
+#endif
 
 	static ThreadStartFunc threadProc;
 
-- 
GitLab