summaryrefslogtreecommitdiff
path: root/src/threading
diff options
context:
space:
mode:
authorShadowNinja <shadowninja@minetest.net>2016-03-07 16:55:32 -0500
committerShadowNinja <shadowninja@minetest.net>2016-04-28 13:21:46 -0400
commit46fd114e9a4e05b74576dce682e24357363298e7 (patch)
tree78eebcdc7f2b76c52ed4ad0b85600cdfcbcce018 /src/threading
parente41673820ffe200df78b1ec185ccb9d9ca962ae1 (diff)
downloadminetest-46fd114e9a4e05b74576dce682e24357363298e7.tar.gz
minetest-46fd114e9a4e05b74576dce682e24357363298e7.tar.bz2
minetest-46fd114e9a4e05b74576dce682e24357363298e7.zip
Fix race on thread creation
This often broke the threading tests on OSX.
Diffstat (limited to 'src/threading')
-rw-r--r--src/threading/thread.cpp12
-rw-r--r--src/threading/thread.h18
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 @@ public:
/*
* 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 @@ private:
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;