From 24af33b9b9b576374d454184032d116304ebd823 Mon Sep 17 00:00:00 2001 From: auria Date: Wed, 23 Sep 2009 00:48:23 +0000 Subject: [PATCH] Fixed crash on exit + improved error handling so that this bug, if should it occur again, will at least trigger the debugger in an appropriate way and/or give an erorr message git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@4043 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- src/audio/sfx_manager.cpp | 7 ++++++- src/challenges/unlock_manager.cpp | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/audio/sfx_manager.cpp b/src/audio/sfx_manager.cpp index 27347bd9d..220b6b5b8 100644 --- a/src/audio/sfx_manager.cpp +++ b/src/audio/sfx_manager.cpp @@ -71,12 +71,15 @@ SFXManager::~SFXManager() { delete (*i); } // for i in m_all_sfx + m_all_sfx.clear(); //the unbuffer all of the buffers for(unsigned int ii = 0; ii != m_sfx_buffers.size(); ii++) { alDeleteBuffers(1, &(m_sfx_buffers[ii])); } + + sfx_manager = NULL; } // ~SFXManager //---------------------------------------------------------------------------- @@ -352,12 +355,14 @@ void SFXManager::deleteSFX(SFXBase *sfx) { std::vector::iterator i; i=std::find(m_all_sfx.begin(), m_all_sfx.end(), sfx); - delete sfx; + if(i==m_all_sfx.end()) { fprintf(stderr, "SFXManager::deleteSFX : Warning: sfx not found in list.\n"); return; } + + delete sfx; m_all_sfx.erase(i); diff --git a/src/challenges/unlock_manager.cpp b/src/challenges/unlock_manager.cpp index 5472e813b..2975cc10a 100644 --- a/src/challenges/unlock_manager.cpp +++ b/src/challenges/unlock_manager.cpp @@ -128,7 +128,9 @@ UnlockManager::UnlockManager() UnlockManager::~UnlockManager() { save(); - sfx_manager->deleteSFX(m_locked_sound); + + // sfx_manager is destroyed before UnlockManager is, so SFX will be already deleted + // sfx_manager->deleteSFX(m_locked_sound); } // ~UnlockManager //-----------------------------------------------------------------------------