Thread: fix a crash on Windows due to data race condition on Thread::m_start_finished...
authorLoïc Blot <nerzhul@users.noreply.github.com>
Tue, 10 Oct 2017 10:27:08 +0000 (12:27 +0200)
committerGitHub <noreply@github.com>
Tue, 10 Oct 2017 10:27:08 +0000 (12:27 +0200)
src/threading/thread.cpp

index 09cc7d836f1786c2957c9c437da971b1c81d8c3d..3b6851389787d6fca35d32fd2deae14db204c3d7 100644 (file)
@@ -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();
 }