diff --git a/src/audio/music_ogg.cpp b/src/audio/music_ogg.cpp index 0f78d01d9..31b1a593a 100644 --- a/src/audio/music_ogg.cpp +++ b/src/audio/music_ogg.cpp @@ -52,16 +52,9 @@ MusicOggStream::~MusicOggStream() bool MusicOggStream::load(const std::string& filename) { m_error = true; - if(!release()) - { - user_config->setMusic(UserConfig::UC_TEMPORARY_DISABLE); - fprintf(stderr,"Problems oggStream:release. Disabling music.\n"); - return false; - } - m_fileName = filename; - if(m_fileName=="") return false; - + if(m_fileName=="") return false; + m_oggFile = fopen(m_fileName.c_str(), "rb"); if(!m_oggFile) diff --git a/src/audio/sound_manager.cpp b/src/audio/sound_manager.cpp index 30f198cb0..23ef2f33e 100644 --- a/src/audio/sound_manager.cpp +++ b/src/audio/sound_manager.cpp @@ -137,6 +137,10 @@ void SoundManager::addMusicToTracks() //----------------------------------------------------------------------------- void SoundManager::startMusic(MusicInformation* mi) { + // It is possible here that startMusic() will be called without first calling stopMusic(). + // This would cause a memory leak by overwriting m_current_music without first releasing it's resources. + // Guard against this here by making sure that stopMusic() is called before starting new music. + stopMusic(); m_current_music = mi; if(!mi || !user_config->doMusic() || !m_initialized) return;