From dd88df4bc7ac8681dab9b35e0cf3b8f5abc33484 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 27 Apr 2016 14:52:23 +0100 Subject: [PATCH] Memory leak fixes. --- src/battle/effects.c | 5 ++++- src/battle/script.c | 14 ++++++++------ src/galaxy/mission.c | 2 +- src/game/title.c | 4 ++++ src/game/title.h | 1 + 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/battle/effects.c b/src/battle/effects.c index 8a86644..b0f0efb 100644 --- a/src/battle/effects.c +++ b/src/battle/effects.c @@ -648,7 +648,10 @@ static void setRandomShieldHue(Effect *e) void destroyEffects(void) { - free(effectsToDraw); + if (effectsToDraw) + { + free(effectsToDraw); + } effectsToDraw = NULL; } diff --git a/src/battle/script.c b/src/battle/script.c index bc0e02a..4d4e60b 100644 --- a/src/battle/script.c +++ b/src/battle/script.c @@ -22,18 +22,20 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. static void executeNextLine(ScriptRunner *runner); -static cJSON *scriptJSON; +static cJSON *scriptJSON, *rootJSON; static ScriptRunner head; static ScriptRunner *tail; -void initScript(cJSON *scriptNode) +void initScript(cJSON *root) { cJSON *function; memset(&head, 0, sizeof(ScriptRunner)); tail = &head; + + rootJSON = root; - scriptJSON = scriptNode; + scriptJSON = cJSON_GetObjectItem(root, "script"); if (scriptJSON) { @@ -281,11 +283,11 @@ void destroyScript(void) { ScriptRunner *scriptRunner; - if (scriptJSON) + if (rootJSON) { - cJSON_Delete(scriptJSON); + cJSON_Delete(rootJSON); - scriptJSON = NULL; + rootJSON = NULL; } while (head.next) diff --git a/src/galaxy/mission.c b/src/galaxy/mission.c index ec3452b..4cc7945 100644 --- a/src/galaxy/mission.c +++ b/src/galaxy/mission.c @@ -126,7 +126,7 @@ void loadMission(char *filename) battle.unwinnable = getJSONValue(root, "unwinnable", 0); battle.waypointAutoAdvance = getJSONValue(root, "waypointAutoAdvance", 0); - initScript(cJSON_GetObjectItem(root, "script")); + initScript(root); /* music, planet, and background loading must come last, so AUTO works properly */ diff --git a/src/game/title.c b/src/game/title.c index 4a86063..31078c6 100644 --- a/src/game/title.c +++ b/src/game/title.c @@ -225,11 +225,15 @@ static void handleKeyboard(void) static void campaign(void) { + destroyBattle(); + initGalacticMap(); } static void challenges(void) { + destroyBattle(); + game.currentMission = NULL; initChallengeHome(); diff --git a/src/game/title.h b/src/game/title.h index 0a1df9e..94738cb 100644 --- a/src/game/title.h +++ b/src/game/title.h @@ -60,6 +60,7 @@ extern void clearInput(void); extern void initTrophiesDisplay(void); extern void drawTrophies(void); extern void doTrophies(void); +extern void destroyBattle(void); extern App app; extern Battle battle;