From f318653a111406e64d8a99afddebc1bd52d004ff Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 17 Oct 2010 13:25:21 +0000 Subject: [PATCH] - fixed: The intermission data was never freed. SVN r2955 (trunk) --- src/g_mapinfo.cpp | 16 +++++++++++++++- src/intermission/intermission.h | 3 ++- src/intermission/intermission_parse.cpp | 13 +++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/g_mapinfo.cpp b/src/g_mapinfo.cpp index e15de22a2..84b6aa48f 100644 --- a/src/g_mapinfo.cpp +++ b/src/g_mapinfo.cpp @@ -1787,6 +1787,20 @@ void FMapInfoParser::ParseMapInfo (int lump, level_info_t &gamedefaults, level_i } +//========================================================================== +// +// +// +//========================================================================== + +void DeinitIntermissions(); + +static void ClearMapinfo() +{ + ClearEpisodes(); + DeinitIntermissions(); +} + //========================================================================== // // G_ParseMapInfo @@ -1800,7 +1814,7 @@ void G_ParseMapInfo (const char *basemapinfo) int lump, lastlump = 0; level_info_t gamedefaults; - atterm(ClearEpisodes); + atterm(ClearMapinfo); // Parse the default MAPINFO for the current game. This lump *MUST* come from zdoom.pk3. if (basemapinfo != NULL) diff --git a/src/intermission/intermission.h b/src/intermission/intermission.h index 72dd5a2e1..4298b54b5 100644 --- a/src/intermission/intermission.h +++ b/src/intermission/intermission.h @@ -80,6 +80,7 @@ struct FIntermissionAction TArray mOverlays; FIntermissionAction(); + virtual ~FIntermissionAction() {} virtual bool ParseKey(FScanner &sc); }; @@ -145,7 +146,7 @@ struct FIntermissionActionScroller : public FIntermissionAction struct FIntermissionDescriptor { FName mLink; - TArray mActions; + TDeletingArray mActions; }; typedef TMap FIntermissionDescriptorList; diff --git a/src/intermission/intermission_parse.cpp b/src/intermission/intermission_parse.cpp index b79519863..bf6ae0ddd 100644 --- a/src/intermission/intermission_parse.cpp +++ b/src/intermission/intermission_parse.cpp @@ -47,6 +47,19 @@ static void ReplaceIntermission(FName intname,FIntermissionDescriptor *desc) IntermissionDescriptors[intname] = desc; } +void DeinitIntermissions() +{ + FIntermissionDescriptorList::Iterator it(IntermissionDescriptors); + + FIntermissionDescriptorList::Pair *pair; + + while (it.NextPair(pair)) + { + delete pair->Value; + pair->Value = NULL; + } +} + //========================================================================== // // FIntermissionAction