Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Fix race on thread creation
This often broke the threading tests on OSX.
- Loading branch information
Showing
with
17 additions
and
13 deletions.
-
+1
−11
src/threading/thread.cpp
-
+16
−2
src/threading/thread.h
|
@@ -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) |
|
|
|
@@ -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; |
|
|
|
|
|
I wish this was indented...