diff options
-rw-r--r-- | src/gamelog.cpp | 5 | ||||
-rw-r--r-- | src/gamelog.h | 1 | ||||
-rw-r--r-- | src/saveload/saveload.cpp | 4 |
3 files changed, 10 insertions, 0 deletions
diff --git a/src/gamelog.cpp b/src/gamelog.cpp index b325dc7fd..156dfe628 100644 --- a/src/gamelog.cpp +++ b/src/gamelog.cpp @@ -87,6 +87,11 @@ void GamelogStopAction() if (print) GamelogPrintDebug(5); } +void GamelogStopAnyAction() +{ + if (_gamelog_action_type != GLAT_NONE) GamelogStopAction(); +} + /** * Frees the memory allocated by a gamelog */ diff --git a/src/gamelog.h b/src/gamelog.h index 0f21fe0f1..e7951c50c 100644 --- a/src/gamelog.h +++ b/src/gamelog.h @@ -27,6 +27,7 @@ enum GamelogActionType { void GamelogStartAction(GamelogActionType at); void GamelogStopAction(); +void GamelogStopAnyAction(); void GamelogFree(struct LoggedAction *gamelog_action, uint gamelog_actions); void GamelogReset(); diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index aeaa7a5ed..f9eebed46 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -341,6 +341,10 @@ void NORETURN SlError(StringID string, const char *extra_msg) * when we access them during cleaning the pool dereferences of * those indices will be made with segmentation faults as result. */ if (_sl.action == SLA_LOAD || _sl.action == SLA_PTRS) SlNullPointers(); + + /* Logging could be active. */ + GamelogStopAnyAction(); + throw std::exception(); } |