changeset 19047:048850ec8402 draft

(svn r23901) -Fix: memory leak everytime one clicked a savegame in the load GUI
author smatz <smatz@openttd.org>
date Sun, 05 Feb 2012 15:51:13 +0000
parents 657a0288111f
children fb0ef71acfb2
files src/fios_gui.cpp src/gamelog.cpp src/gamelog.h
diffstat 3 files changed, 17 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/fios_gui.cpp
+++ b/src/fios_gui.cpp
@@ -27,6 +27,7 @@
 #include "landscape_type.h"
 #include "date_func.h"
 #include "core/geometry_func.hpp"
+#include "gamelog.h"
 
 #include "widgets/fios_widget.h"
 
@@ -60,7 +61,7 @@
 	}
 	companies.Clear();
 
-	free(this->gamelog_action);
+	GamelogFree(this->gamelog_action, this->gamelog_actions);
 	this->gamelog_action = NULL;
 	this->gamelog_actions = 0;
 
--- a/src/gamelog.cpp
+++ b/src/gamelog.cpp
@@ -64,14 +64,12 @@
 }
 
 /**
- * Resets and frees all memory allocated - used before loading or starting a new game
+ * Frees the memory allocated by a gamelog
  */
-void GamelogReset()
+void GamelogFree(LoggedAction *gamelog_action, uint gamelog_actions)
 {
-	assert(_gamelog_action_type == GLAT_NONE);
-
-	for (uint i = 0; i < _gamelog_actions; i++) {
-		const LoggedAction *la = &_gamelog_action[i];
+	for (uint i = 0; i < gamelog_actions; i++) {
+		const LoggedAction *la = &gamelog_action[i];
 		for (uint j = 0; j < la->changes; j++) {
 			const LoggedChange *lc = &la->change[j];
 			if (lc->ct == GLCT_SETTING) free(lc->setting.name);
@@ -79,7 +77,16 @@
 		free(la->change);
 	}
 
-	free(_gamelog_action);
+	free(gamelog_action);
+}
+
+/**
+ * Resets and frees all memory allocated - used before loading or starting a new game
+ */
+void GamelogReset()
+{
+	assert(_gamelog_action_type == GLAT_NONE);
+	GamelogFree(_gamelog_action, _gamelog_actions);
 
 	_gamelog_action  = NULL;
 	_gamelog_actions = 0;
--- a/src/gamelog.h
+++ b/src/gamelog.h
@@ -30,6 +30,7 @@
 void GamelogStartAction(GamelogActionType at);
 void GamelogStopAction();
 
+void GamelogFree(struct LoggedAction *gamelog_action, uint gamelog_actions);
 void GamelogReset();
 
 /**