1
0
mirror of https://github.com/wolfpld/tracy.git synced 2025-03-20 07:40:02 +08:00

Merge 809a578ad556d3ddb47b31cbdc52b9c04e25e192 into 9074461ffbb44ad77244a493c1090eeaa6f20322

This commit is contained in:
mncat77 2025-03-13 16:29:35 +05:00 committed by GitHub
commit 6a24d4fa2f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -10,6 +10,9 @@
# include <inttypes.h>
# include <intrin.h>
# include "../common/TracyUwp.hpp"
# ifndef _MSC_VER
# include <excpt.h>
# endif
#else
# include <sys/time.h>
# include <sys/param.h>
@ -909,6 +912,13 @@ LONG WINAPI CrashFilter( PEXCEPTION_POINTERS pExp )
}
#endif
#if defined _WIN32 && !defined _MSC_VER
LONG WINAPI CrashFilterExecute( PEXCEPTION_POINTERS pExp )
{
return EXCEPTION_EXECUTE_HANDLER;
}
#endif
static Profiler* s_instance = nullptr;
static Thread* s_thread;
#ifndef TRACY_NO_FRAME_IMAGE
@ -1511,7 +1521,7 @@ void Profiler::InstallCrashHandler()
#if defined _WIN32 && !defined TRACY_UWP && !defined TRACY_NO_CRASH_HANDLER
// We cannot use Vectored Exception handling because it catches application-wide frame-based SEH blocks. We only
// want to catch unhandled exceptions.
m_prevHandler = SetUnhandledExceptionFilter( CrashFilter );
m_prevHandler = reinterpret_cast<void*>( SetUnhandledExceptionFilter( CrashFilter ) );
#endif
#ifndef TRACY_NO_CRASH_HANDLER
@ -3122,6 +3132,7 @@ char* Profiler::SafeCopyProlog( const char* data, size_t size )
if( size > SafeSendBufferSize ) buf = (char*)tracy_malloc( size );
#ifdef _WIN32
# ifdef _MSC_VER
__try
{
memcpy( buf, data, size );
@ -3130,6 +3141,16 @@ char* Profiler::SafeCopyProlog( const char* data, size_t size )
{
success = false;
}
# else
__try1( CrashFilterExecute )
{
memcpy( buf, data, size );
}
__except1
{
success = false;
}
# endif
#else
// Send through the pipe to ensure safe reads
for( size_t offset = 0; offset != size; /*in loop*/ )