summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2013-09-15 01:12:30 +0300
committerAndrei Karas <akaras@inbox.ru>2013-09-15 01:12:30 +0300
commit54d665ca2ff9244ef4b5a6dc48424d4a3364a40c (patch)
tree5e2a0d0acad140d0842d4ee169131049fd5b1af7
parent4206ffda4d2acd238c8f0093345af0431cf8a863 (diff)
downloadmv-54d665ca2ff9244ef4b5a6dc48424d4a3364a40c.tar.gz
mv-54d665ca2ff9244ef4b5a6dc48424d4a3364a40c.tar.bz2
mv-54d665ca2ff9244ef4b5a6dc48424d4a3364a40c.tar.xz
mv-54d665ca2ff9244ef4b5a6dc48424d4a3364a40c.zip
fix music RWops memory leak.
-rw-r--r--src/resources/sdlmusic.cpp19
-rw-r--r--src/resources/sdlmusic.h8
2 files changed, 20 insertions, 7 deletions
diff --git a/src/resources/sdlmusic.cpp b/src/resources/sdlmusic.cpp
index fb31c0562..03c6922d6 100644
--- a/src/resources/sdlmusic.cpp
+++ b/src/resources/sdlmusic.cpp
@@ -26,28 +26,37 @@
#include "debug.h"
-SDLMusic::SDLMusic(Mix_Music *const music) :
+SDLMusic::SDLMusic(Mix_Music *const music, SDL_RWops *const rw) :
Resource(),
- mMusic(music)
+ mMusic(music),
+ mRw(rw)
{
}
SDLMusic::~SDLMusic()
{
Mix_FreeMusic(mMusic);
+#ifndef USE_SDL2
+ if (mRw)
+ {
+ SDL_RWclose(mRw);
+ mRw = nullptr;
+ }
+#endif
}
Resource *SDLMusic::load(SDL_RWops *const rw)
{
#ifdef USE_SDL2
if (Mix_Music *const music = Mix_LoadMUSType_RW(rw, MUS_OGG, 1))
+ {
+ return new SDLMusic(music, nullptr);
#else
- // +++ here probably mem leak
// Mix_LoadMUSType_RW was added without version changed in SDL1.2 :(
if (Mix_Music *const music = Mix_LoadMUS_RW(rw))
-#endif
{
- return new SDLMusic(music);
+ return new SDLMusic(music, rw);
+#endif
}
else
{
diff --git a/src/resources/sdlmusic.h b/src/resources/sdlmusic.h
index 05a5528b7..23397ec61 100644
--- a/src/resources/sdlmusic.h
+++ b/src/resources/sdlmusic.h
@@ -29,6 +29,8 @@
#include "localconsts.h"
+//struct SDL_RWops;
+
/**
* Defines a class for loading and storing music.
*/
@@ -37,7 +39,8 @@ class SDLMusic final : public Resource
public:
SDLMusic() :
Resource(),
- mMusic(nullptr)
+ mMusic(nullptr),
+ mRw(nullptr)
{ }
A_DELETE_COPY(SDLMusic)
@@ -73,9 +76,10 @@ class SDLMusic final : public Resource
/**
* Constructor.
*/
- explicit SDLMusic(Mix_Music *const music);
+ explicit SDLMusic(Mix_Music *const music, SDL_RWops *const rw);
Mix_Music *mMusic;
+ SDL_RWops *mRw;
};
#endif // RESOURCES_SDLMUSIC_H