diff --git a/client/TracyProfiler.cpp b/client/TracyProfiler.cpp index ecc90d88..17062305 100644 --- a/client/TracyProfiler.cpp +++ b/client/TracyProfiler.cpp @@ -1231,7 +1231,7 @@ void Profiler::SpawnWorkerThreads() #if defined _WIN32 || defined __CYGWIN__ s_profilerThreadId = GetThreadId( s_thread->Handle() ); - AddVectoredExceptionHandler( 1, CrashFilter ); + m_exceptionHandler = AddVectoredExceptionHandler( 1, CrashFilter ); #endif #ifdef __linux__ @@ -1263,6 +1263,10 @@ Profiler::~Profiler() { m_shutdown.store( true, std::memory_order_relaxed ); +#if defined _WIN32 || defined __CYGWIN__ + if( m_crashHandlerInstalled ) RemoveVectoredExceptionHandler( m_exceptionHandler ); +#endif + #ifdef __linux__ if( m_crashHandlerInstalled ) { diff --git a/client/TracyProfiler.hpp b/client/TracyProfiler.hpp index 8a0f827d..f120f1d3 100644 --- a/client/TracyProfiler.hpp +++ b/client/TracyProfiler.hpp @@ -812,6 +812,9 @@ private: char* m_queryData; char* m_queryDataPtr; +#if defined _WIN32 || defined __CYGWIN__ + void* m_exceptionHandler; +#endif #ifdef __linux__ struct { struct sigaction pwr, ill, fpe, segv, pipe, bus, abrt;