aboutsummaryrefslogtreecommitdiff
path: root/src/threading
diff options
context:
space:
mode:
authorsfan5 <sfan5@live.de>2022-04-30 16:04:19 +0200
committersfan5 <sfan5@live.de>2022-05-14 18:33:42 +0200
commit1e7b5d6fdb09e08b024fe5461c12efee92032936 (patch)
treee3aa350cec142b4cb75cc58805f053d253fa6cdb /src/threading
parenta55982e7f01c83d5289b8018754963299b9e9484 (diff)
downloadminetest-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
Diffstat (limited to 'src/threading')
-rw-r--r--src/threading/thread.cpp6
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;