diff options
author | sfan5 <sfan5@live.de> | 2022-04-30 16:04:19 +0200 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2022-05-14 18:33:42 +0200 |
commit | 1e7b5d6fdb09e08b024fe5461c12efee92032936 (patch) | |
tree | e3aa350cec142b4cb75cc58805f053d253fa6cdb | |
parent | a55982e7f01c83d5289b8018754963299b9e9484 (diff) | |
download | minetest-1e7b5d6fdb09e08b024fe5461c12efee92032936.tar.gz minetest-1e7b5d6fdb09e08b024fe5461c12efee92032936.tar.bz2 minetest-1e7b5d6fdb09e08b024fe5461c12efee92032936.zip |
Fix synchronization issue at thread start
If a newly started thread immediately exits then m_running would
immediately be set to false again and the caller would be stuck
waiting for m_running to become true forever.
Since a mutex for synchronizing startup already exists we can
simply move the while loop into it.
see also: #5134 which introduced m_start_finished_mutex
-rw-r--r-- | src/threading/thread.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/threading/thread.cpp b/src/threading/thread.cpp index 5cfc60995..ef025ac1d 100644 --- a/src/threading/thread.cpp +++ b/src/threading/thread.cpp @@ -121,12 +121,12 @@ bool Thread::start() return false; } - // Allow spawned thread to continue - m_start_finished_mutex.unlock(); - while (!m_running) sleep_ms(1); + // Allow spawned thread to continue + m_start_finished_mutex.unlock(); + m_joinable = true; return true; |