From 6872d845e6321c06cc99aebe268418c6fedbb8f3 Mon Sep 17 00:00:00 2001 From: Blake Taylor Date: Tue, 26 Apr 2022 21:01:00 -0700 Subject: [PATCH] - Adding TRACY_NO_CRASH_HANDLER flag to allow for disabling the crash handler --- client/TracyProfiler.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/client/TracyProfiler.cpp b/client/TracyProfiler.cpp index a9f674bd..562d4bef 100644 --- a/client/TracyProfiler.cpp +++ b/client/TracyProfiler.cpp @@ -738,7 +738,7 @@ static BroadcastMessage& GetBroadcastMessage( const char* procname, size_t pnsz, return msg; } -#if defined _WIN32 && !defined TRACY_UWP +#if defined _WIN32 && !defined TRACY_UWP && !defined TRACY_NO_CRASH_HANDLER static DWORD s_profilerThreadId = 0; static char s_crashText[1024]; @@ -847,7 +847,7 @@ LONG WINAPI CrashFilter( PEXCEPTION_POINTERS pExp ) } #endif -#ifdef __linux__ +#if defined __linux__ && !defined TRACY_NO_CRASH_HANDLER # ifndef TRACY_CRASH_SIGNAL # define TRACY_CRASH_SIGNAL SIGPWR # endif @@ -1077,7 +1077,6 @@ static void CrashHandler( int signal, siginfo_t* info, void* /*ucontext*/ ) } #endif - enum { QueuePrealloc = 256 * 1024 }; static Profiler* s_instance = nullptr; @@ -1355,7 +1354,9 @@ Profiler::Profiler() #endif , m_paramCallback( nullptr ) , m_queryData( nullptr ) +#ifndef TRACY_NO_CRASH_HANDLER , m_crashHandlerInstalled( false ) +#endif { assert( !s_instance ); s_instance = this; @@ -1416,12 +1417,12 @@ void Profiler::SpawnWorkerThreads() new(s_symbolThread) Thread( LaunchSymbolWorker, this ); #endif -#if defined _WIN32 && !defined TRACY_UWP +#if defined _WIN32 && !defined TRACY_UWP && !defined TRACY_NO_CRASH_HANDLER s_profilerThreadId = GetThreadId( s_thread->Handle() ); m_exceptionHandler = AddVectoredExceptionHandler( 1, CrashFilter ); #endif -#ifdef __linux__ +#if defined __linux__ && !defined TRACY_NO_CRASH_HANDLER struct sigaction threadFreezer = {}; threadFreezer.sa_handler = ThreadFreezer; sigaction( TRACY_CRASH_SIGNAL, &threadFreezer, &m_prevSignal.pwr ); @@ -1437,7 +1438,9 @@ void Profiler::SpawnWorkerThreads() sigaction( SIGABRT, &crashHandler, &m_prevSignal.abrt ); #endif +#ifndef TRACY_NO_CRASH_HANDLER m_crashHandlerInstalled = true; +#endif #ifdef TRACY_HAS_CALLSTACK InitCallstack(); @@ -1450,11 +1453,11 @@ Profiler::~Profiler() { m_shutdown.store( true, std::memory_order_relaxed ); -#if defined _WIN32 && !defined TRACY_UWP +#if defined _WIN32 && !defined TRACY_UWP && !defined TRACY_NO_CRASH_HANDLER if( m_crashHandlerInstalled ) RemoveVectoredExceptionHandler( m_exceptionHandler ); #endif -#ifdef __linux__ +#if defined __linux__ && !defined TRACY_NO_CRASH_HANDLER if( m_crashHandlerInstalled ) { sigaction( TRACY_CRASH_SIGNAL, &m_prevSignal.pwr, nullptr ); @@ -1467,6 +1470,8 @@ Profiler::~Profiler() } #endif +#endif + #ifdef TRACY_HAS_SYSTEM_TRACING if( s_sysTraceThread ) {