- Fixed: The FSpecialFont constructor created the name string twice.

- Fixed: The animated door parser was still leaking memory when it encountered
  an invalid animation due to missing textures.
- Fixed: The music volume list wasn't freed.
- Fixed: The image for WADs that were loaded from inside Zips was never freed.


SVN r92 (trunk)
This commit is contained in:
Christoph Oelckers 2006-05-09 21:21:57 +00:00
parent 6de9e9a433
commit 7ed597fcbe
5 changed files with 33 additions and 6 deletions

View File

@ -1,6 +1,12 @@
May 9, 2006 (Changes by Graf Zahl)
- Changed FDoorAnimation deletion so that the array takes care of it. This
eliminates some complications with the requirements a destructor has.
- Fixed: The FSpecialFont constructor created the name string twice.
- Fixed: The animated door parser was still leaking memory when it encountered
an invalid animation due to missing textures.
- Fixed: The music volume list wasn't freed.
- Fixed: The image for WADs that were loaded from inside Zips was never freed.
- Changed FDoorAnimation deletion so that the array takes care of it. The
original destructor approach would have necessitated a lot more supporting
code to work as intended.
- Fixed: Skin definitions were never freed.
- Fixed: Names in terrain definitions were never freed. Replacing them with
FNames would have been a good idea anyway.

View File

@ -856,11 +856,16 @@ void P_ParseAnimatedDoor()
break;
}
}
anim.TextureFrames = new int[frames.Size()];
memcpy (anim.TextureFrames, &frames[0], sizeof(int) * frames.Size());
anim.NumTextureFrames = frames.Size();
if (!error)
{
anim.TextureFrames = new int[frames.Size()];
memcpy (anim.TextureFrames, &frames[0], sizeof(int) * frames.Size());
anim.NumTextureFrames = frames.Size();
DoorAnimations.Push (anim);
}
else
{
if (anim.OpenSound!=NULL) delete [] anim.OpenSound;
if (anim.CloseSound!=NULL) delete [] anim.CloseSound;
}
}

View File

@ -210,6 +210,19 @@ static const char *SICommandStrings[] =
static TArray<FRandomSoundList> S_rnd;
static FMusicVolume *MusicVolumes;
static struct MusicVolumeDeleter
{
~MusicVolumeDeleter()
{
while(MusicVolumes!=NULL)
{
FMusicVolume * next = MusicVolumes->Next;
free(MusicVolumes);
MusicVolumes=next;
}
}
} DeleteTheMusicVolumes;
static int NumPlayerReserves;
static bool DoneReserving;
static bool PlayerClassesIsSorted;

View File

@ -1138,7 +1138,6 @@ FSpecialFont::FSpecialFont (const char *name, int first, int count, int *lumplis
FontHeight = 0;
GlobalKerning = false;
memset (usedcolors, 0, 256);
Name = copystring (name);
Next = FirstFont;
FirstFont = this;

View File

@ -1938,6 +1938,10 @@ FWadCollection::WadFileRecord::~WadFileRecord ()
{
delete[] Name;
}
if (MemoryData != NULL)
{
delete [] MemoryData;
}
}
long FWadCollection::WadFileRecord::Seek (long offset, int origin)