aboutsummaryrefslogtreecommitdiff
path: root/src/threading
diff options
context:
space:
mode:
Diffstat (limited to 'src/threading')
-rw-r--r--src/threading/thread.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/threading/thread.cpp b/src/threading/thread.cpp
index 09cc7d836..3b6851389 100644
--- a/src/threading/thread.cpp
+++ b/src/threading/thread.cpp
@@ -74,8 +74,8 @@ Thread::~Thread()
kill();
// Make sure start finished mutex is unlocked before it's destroyed
- m_start_finished_mutex.try_lock();
- m_start_finished_mutex.unlock();
+ if (m_start_finished_mutex.try_lock())
+ m_start_finished_mutex.unlock();
}
@@ -196,6 +196,10 @@ void Thread::threadProc(Thread *thr)
thr->m_retval = thr->run();
thr->m_running = false;
+ // Unlock m_start_finished_mutex to prevent data race condition on Windows.
+ // On Windows with VS2017 build TerminateThread is called and this mutex is not
+ // released. We try to unlock it from caller thread and it's refused by system.
+ thr->m_start_finished_mutex.unlock();
g_logger.deregisterThread();
}