mirror of https://github.com/OpenTTD/OpenTTD
(svn r18446) -Fix (r17450): abort() doesn't trigger crashlog on windows
parent
7a38435a63
commit
0c577dfde6
|
@ -20,6 +20,7 @@
|
||||||
#include "../../gamelog.h"
|
#include "../../gamelog.h"
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Windows implementation for the crash logger.
|
* Windows implementation for the crash logger.
|
||||||
|
@ -407,6 +408,11 @@ static LONG WINAPI ExceptionHandler(EXCEPTION_POINTERS *ep)
|
||||||
extern "C" void *_get_safe_esp();
|
extern "C" void *_get_safe_esp();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void CDECL CustomAbort(int signal)
|
||||||
|
{
|
||||||
|
RaiseException(0xE1212012, 0, 0, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
/* static */ void CrashLog::InitialiseCrashLog()
|
/* static */ void CrashLog::InitialiseCrashLog()
|
||||||
{
|
{
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
|
@ -421,6 +427,12 @@ extern "C" void *_get_safe_esp();
|
||||||
asm("movl %esp, __safe_esp");
|
asm("movl %esp, __safe_esp");
|
||||||
#endif
|
#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);
|
SetUnhandledExceptionFilter(ExceptionHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue