Attempt to fix memleak when quitting the game with music enabled (bug #25092)
This commit is contained in:
parent
be3cf5fa62
commit
92d1a26caf
1 changed files with 6 additions and 6 deletions
|
@ -146,7 +146,7 @@ private:
|
|||
|
||||
std::list< sound_cache_chunk > sound_cache;
|
||||
typedef std::list< sound_cache_chunk >::iterator sound_cache_iterator;
|
||||
std::map<std::string,Mix_Music*> music_cache;
|
||||
std::map<std::string, std::shared_ptr<Mix_Music>> music_cache;
|
||||
|
||||
std::vector<std::string> played_before;
|
||||
|
||||
|
@ -486,19 +486,19 @@ static void play_new_music()
|
|||
|
||||
const std::string& filename = current_track.file_path();
|
||||
|
||||
std::map<std::string,Mix_Music*>::const_iterator itor = music_cache.find(filename);
|
||||
auto itor = music_cache.find(filename);
|
||||
if(itor == music_cache.end()) {
|
||||
LOG_AUDIO << "attempting to insert track '" << filename << "' into cache\n";
|
||||
|
||||
SDL_RWops *rwops = filesystem::load_RWops(filename);
|
||||
Mix_Music* const music = Mix_LoadMUSType_RW(rwops, MUS_NONE, true); // SDL takes ownership of rwops
|
||||
const std::shared_ptr<Mix_Music> music(Mix_LoadMUSType_RW(rwops, MUS_NONE, true), &Mix_FreeMusic); // SDL takes ownership of rwops
|
||||
|
||||
if(music == nullptr) {
|
||||
ERR_AUDIO << "Could not load music file '" << filename << "': "
|
||||
<< Mix_GetError() << "\n";
|
||||
return;
|
||||
}
|
||||
itor = music_cache.insert(std::pair<std::string,Mix_Music*>(filename,music)).first;
|
||||
itor = music_cache.emplace(filename, music).first;
|
||||
last_track=current_track;
|
||||
}
|
||||
|
||||
|
@ -509,7 +509,7 @@ static void play_new_music()
|
|||
fading_time=0;
|
||||
}
|
||||
|
||||
const int res = Mix_FadeInMusic(itor->second, 1, fading_time);
|
||||
const int res = Mix_FadeInMusic(itor->second.get(), 1, fading_time);
|
||||
if(res < 0)
|
||||
{
|
||||
ERR_AUDIO << "Could not play music: " << Mix_GetError() << " " << filename <<" " << std::endl;
|
||||
|
@ -606,7 +606,7 @@ void music_thinker::process(events::pump_info &info) {
|
|||
|
||||
if (unload_music) {
|
||||
for (auto track : music_cache) {
|
||||
Mix_FreeMusic(track.second);
|
||||
Mix_FreeMusic(track.second.get());
|
||||
}
|
||||
music_cache.clear();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue