diff --git a/src/gamelog.cpp b/src/gamelog.cpp
index b325dc7fd3..156dfe6287 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 0f21fe0f1b..e7951c50c7 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 aeaa7a5edd..f9eebed46a 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();
 }