# HG changeset patch # User glx # Date 1260372253 0 # Node ID 5a588b3068cf418cbfa7a1e65b53852663ea5478 # Parent f48ae1a0d97610d866f7c73ef5ab18406b5c97ec (svn r18446) -Fix (r17450): abort() doesn't trigger crashlog on windows diff --git a/src/os/windows/crashlog_win.cpp b/src/os/windows/crashlog_win.cpp --- a/src/os/windows/crashlog_win.cpp +++ b/src/os/windows/crashlog_win.cpp @@ -20,6 +20,7 @@ #include "../../gamelog.h" #include +#include /** * Windows implementation for the crash logger. @@ -407,6 +408,11 @@ extern "C" void *_get_safe_esp(); #endif +static void CDECL CustomAbort(int signal) +{ + RaiseException(0xE1212012, 0, 0, NULL); +} + /* static */ void CrashLog::InitialiseCrashLog() { #if defined(_MSC_VER) @@ -421,6 +427,12 @@ asm("movl %esp, __safe_esp"); #endif + /* SIGABRT is not an unhandled exception, so we need to intercept it. */ + signal(SIGABRT, CustomAbort); +#if defined(_MSC_VER) + /* Don't show abort message as we will get the crashlog window anyway. */ + _set_abort_behavior(0, _WRITE_ABORT_MSG); +#endif SetUnhandledExceptionFilter(ExceptionHandler); }