summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gamelog.cpp5
-rw-r--r--src/gamelog.h1
-rw-r--r--src/saveload/saveload.cpp4
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();
}