mirror of
https://github.com/minetest/minetest.git
synced 2024-12-03 04:53:47 +01:00
Thread: fix a crash on Windows due to data race condition on Thread::m_start_finished_mutex (#6515)
This commit is contained in:
parent
9dc1f2d638
commit
0129c9a9dd
@ -103,7 +103,7 @@ Thread::~Thread()
|
|||||||
kill();
|
kill();
|
||||||
|
|
||||||
// Make sure start finished mutex is unlocked before it's destroyed
|
// Make sure start finished mutex is unlocked before it's destroyed
|
||||||
m_start_finished_mutex.try_lock();
|
if (m_start_finished_mutex.try_lock())
|
||||||
m_start_finished_mutex.unlock();
|
m_start_finished_mutex.unlock();
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -267,6 +267,10 @@ DWORD WINAPI Thread::threadProc(LPVOID param)
|
|||||||
thr->m_retval = thr->run();
|
thr->m_retval = thr->run();
|
||||||
|
|
||||||
thr->m_running = false;
|
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();
|
g_logger.deregisterThread();
|
||||||
|
|
||||||
// 0 is returned here to avoid an unnecessary ifdef clause
|
// 0 is returned here to avoid an unnecessary ifdef clause
|
||||||
|
Loading…
Reference in New Issue
Block a user