Merge branch 'crashlog_improvements' into jgrpp
This commit is contained in:
@@ -53,6 +53,20 @@ extern GameMode _game_mode;
|
|||||||
extern SwitchMode _switch_mode;
|
extern SwitchMode _switch_mode;
|
||||||
extern bool _exit_game;
|
extern bool _exit_game;
|
||||||
|
|
||||||
|
#if defined(WIN32)
|
||||||
|
extern bool _in_event_loop_post_crash;
|
||||||
|
|
||||||
|
inline bool InEventLoopPostCrash()
|
||||||
|
{
|
||||||
|
return _in_event_loop_post_crash;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
inline bool InEventLoopPostCrash()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/** Modes of pausing we've got */
|
/** Modes of pausing we've got */
|
||||||
enum PauseMode {
|
enum PauseMode {
|
||||||
PM_UNPAUSED = 0, ///< A normal unpaused game
|
PM_UNPAUSED = 0, ///< A normal unpaused game
|
||||||
|
@@ -21,6 +21,7 @@
|
|||||||
#include "../../gamelog.h"
|
#include "../../gamelog.h"
|
||||||
#include "../../saveload/saveload.h"
|
#include "../../saveload/saveload.h"
|
||||||
#include "../../video/video_driver.hpp"
|
#include "../../video/video_driver.hpp"
|
||||||
|
#include "../../openttd.h"
|
||||||
#if defined(WITH_DEMANGLE)
|
#if defined(WITH_DEMANGLE)
|
||||||
#include <cxxabi.h>
|
#include <cxxabi.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -532,6 +533,8 @@ void *_safe_esp = NULL;
|
|||||||
|
|
||||||
static LONG WINAPI ExceptionHandler(EXCEPTION_POINTERS *ep)
|
static LONG WINAPI ExceptionHandler(EXCEPTION_POINTERS *ep)
|
||||||
{
|
{
|
||||||
|
_in_event_loop_post_crash = true;
|
||||||
|
|
||||||
if (CrashLogWindows::current != NULL) {
|
if (CrashLogWindows::current != NULL) {
|
||||||
CrashLog::AfterCrashLogCleanup();
|
CrashLog::AfterCrashLogCleanup();
|
||||||
ExitProcess(2);
|
ExitProcess(2);
|
||||||
|
@@ -34,6 +34,8 @@
|
|||||||
#undef strncat
|
#undef strncat
|
||||||
#undef strncpy
|
#undef strncpy
|
||||||
|
|
||||||
|
bool _in_event_loop_post_crash;
|
||||||
|
|
||||||
static bool _has_console;
|
static bool _has_console;
|
||||||
static bool _cursor_disable = true;
|
static bool _cursor_disable = true;
|
||||||
static bool _cursor_visible = true;
|
static bool _cursor_visible = true;
|
||||||
@@ -82,6 +84,7 @@ bool LoadLibraryList(Function proc[], const char *dll)
|
|||||||
|
|
||||||
void ShowOSErrorBox(const char *buf, bool system)
|
void ShowOSErrorBox(const char *buf, bool system)
|
||||||
{
|
{
|
||||||
|
_in_event_loop_post_crash = true;
|
||||||
MyShowCursor(true);
|
MyShowCursor(true);
|
||||||
MessageBox(GetActiveWindow(), OTTD2FS(buf), _T("Error!"), MB_ICONSTOP);
|
MessageBox(GetActiveWindow(), OTTD2FS(buf), _T("Error!"), MB_ICONSTOP);
|
||||||
}
|
}
|
||||||
|
@@ -2597,6 +2597,8 @@ bool FocusWindowById(WindowClass cls, WindowNumber number)
|
|||||||
*/
|
*/
|
||||||
void HandleKeypress(uint keycode, WChar key)
|
void HandleKeypress(uint keycode, WChar key)
|
||||||
{
|
{
|
||||||
|
if (InEventLoopPostCrash()) return;
|
||||||
|
|
||||||
/* World generation is multithreaded and messes with companies.
|
/* World generation is multithreaded and messes with companies.
|
||||||
* But there is no company related window open anyway, so _current_company is not used. */
|
* But there is no company related window open anyway, so _current_company is not used. */
|
||||||
assert(HasModalProgress() || IsLocalCompany());
|
assert(HasModalProgress() || IsLocalCompany());
|
||||||
@@ -2801,6 +2803,8 @@ static void HandleKeyScrolling()
|
|||||||
|
|
||||||
static void MouseLoop(MouseClick click, int mousewheel)
|
static void MouseLoop(MouseClick click, int mousewheel)
|
||||||
{
|
{
|
||||||
|
if (InEventLoopPostCrash()) return;
|
||||||
|
|
||||||
/* World generation is multithreaded and messes with companies.
|
/* World generation is multithreaded and messes with companies.
|
||||||
* But there is no company related window open anyway, so _current_company is not used. */
|
* But there is no company related window open anyway, so _current_company is not used. */
|
||||||
assert(HasModalProgress() || IsLocalCompany());
|
assert(HasModalProgress() || IsLocalCompany());
|
||||||
@@ -2892,6 +2896,8 @@ static void MouseLoop(MouseClick click, int mousewheel)
|
|||||||
*/
|
*/
|
||||||
void HandleMouseEvents()
|
void HandleMouseEvents()
|
||||||
{
|
{
|
||||||
|
if (InEventLoopPostCrash()) return;
|
||||||
|
|
||||||
/* World generation is multithreaded and messes with companies.
|
/* World generation is multithreaded and messes with companies.
|
||||||
* But there is no company related window open anyway, so _current_company is not used. */
|
* But there is no company related window open anyway, so _current_company is not used. */
|
||||||
assert(HasModalProgress() || IsLocalCompany());
|
assert(HasModalProgress() || IsLocalCompany());
|
||||||
@@ -2999,6 +3005,8 @@ static void CheckSoftLimit()
|
|||||||
*/
|
*/
|
||||||
void InputLoop()
|
void InputLoop()
|
||||||
{
|
{
|
||||||
|
if (InEventLoopPostCrash()) return;
|
||||||
|
|
||||||
/* World generation is multithreaded and messes with companies.
|
/* World generation is multithreaded and messes with companies.
|
||||||
* But there is no company related window open anyway, so _current_company is not used. */
|
* But there is no company related window open anyway, so _current_company is not used. */
|
||||||
assert(HasModalProgress() || IsLocalCompany());
|
assert(HasModalProgress() || IsLocalCompany());
|
||||||
|
Reference in New Issue
Block a user