summaryrefslogtreecommitdiff
path: root/src/thread.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/thread.h')
-rw-r--r--src/thread.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/thread.h b/src/thread.h
index bcd469081..24f4f8e2a 100644
--- a/src/thread.h
+++ b/src/thread.h
@@ -14,6 +14,7 @@
#include "crashlog.h"
#include <system_error>
#include <thread>
+#include <mutex>
/**
* Sleep on the current thread for a defined time.
@@ -46,7 +47,17 @@ inline bool StartNewThread(std::thread *thr, const char *name, TFn&& _Fx, TArgs&
{
#ifndef NO_THREADS
try {
+ static std::mutex thread_startup_mutex;
+ std::lock_guard<std::mutex> lock(thread_startup_mutex);
+
std::thread t([] (const char *name, TFn&& F, TArgs&&... A) {
+ /* Delay starting the thread till the main thread is finished
+ * with the administration. This prevent race-conditions on
+ * startup. */
+ {
+ std::lock_guard<std::mutex> lock(thread_startup_mutex);
+ }
+
SetCurrentThreadName(name);
CrashLog::InitThread();
try {