From 22346feea3afaa149b41c4b454db06ba58d0ac1d Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Tue, 21 Aug 2018 01:45:33 +0200 Subject: [PATCH] Fun fact: two threads can crash at the same time. --- client/TracyProfiler.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/TracyProfiler.cpp b/client/TracyProfiler.cpp index 9f9c3c23..01198823 100644 --- a/client/TracyProfiler.cpp +++ b/client/TracyProfiler.cpp @@ -429,6 +429,7 @@ LONG WINAPI CrashFilter( PEXCEPTION_POINTERS pExp ) #ifdef __linux__ static long s_profilerTid = 0; static char s_crashText[1024]; +static std::atomic s_alreadyCrashed( false ); static void ThreadFreezer( int signal ) { @@ -463,6 +464,9 @@ static inline void HexPrint( char*& ptr, uint64_t val ) static void CrashHandler( int signal, siginfo_t* info, void* ucontext ) { + bool expected = false; + if( !s_alreadyCrashed.compare_exchange_strong( expected, true ) ) ThreadFreezer( signal ); + auto msgPtr = s_crashText; switch( signal ) {