diff options
author | smatz <smatz@openttd.org> | 2012-02-05 15:51:13 +0000 |
---|---|---|
committer | smatz <smatz@openttd.org> | 2012-02-05 15:51:13 +0000 |
commit | eb015cbfb62451313d99fa4829d9a712411bf002 (patch) | |
tree | 06901fd370a91bd16bd32d94dd0841ceadfe3a9c | |
parent | fbf29d5da8bc8f76c5f0c205adda7b071f439ab3 (diff) | |
download | openttd-eb015cbfb62451313d99fa4829d9a712411bf002.tar.xz |
(svn r23901) -Fix: memory leak everytime one clicked a savegame in the load GUI
-rw-r--r-- | src/fios_gui.cpp | 3 | ||||
-rw-r--r-- | src/gamelog.cpp | 21 | ||||
-rw-r--r-- | src/gamelog.h | 1 |
3 files changed, 17 insertions, 8 deletions
diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index 3e48c10bb..5ae42897f 100644 --- 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 @@ void LoadCheckData::Clear() } companies.Clear(); - free(this->gamelog_action); + GamelogFree(this->gamelog_action, this->gamelog_actions); this->gamelog_action = NULL; this->gamelog_actions = 0; diff --git a/src/gamelog.cpp b/src/gamelog.cpp index f4f009166..b4b9fd7a6 100644 --- a/src/gamelog.cpp +++ b/src/gamelog.cpp @@ -64,14 +64,12 @@ void GamelogStopAction() } /** - * 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 @@ void GamelogReset() 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; diff --git a/src/gamelog.h b/src/gamelog.h index 8357cb90a..7f5b6a776 100644 --- a/src/gamelog.h +++ b/src/gamelog.h @@ -30,6 +30,7 @@ enum GamelogActionType { void GamelogStartAction(GamelogActionType at); void GamelogStopAction(); +void GamelogFree(struct LoggedAction *gamelog_action, uint gamelog_actions); void GamelogReset(); /** |