From 9714a3a90300ce0c33e02b227395554988b50297 Mon Sep 17 00:00:00 2001 From: John Norman Date: Tue, 10 Jul 2012 23:13:09 -0700 Subject: [PATCH] Fixed a compile error and a crash bug. Fixed a compile error in cPluginManager.cpp. Fixed a crash bug in cAudioManager.cpp. The iterator was becoming invalid as dropping an audio source was removing it from the vector being iterated through. --- cAudio/src/cAudioManager.cpp | 9 +++++++-- cAudio/src/cPluginManager.cpp | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/cAudio/src/cAudioManager.cpp b/cAudio/src/cAudioManager.cpp index c320529..2ff67c0 100644 --- a/cAudio/src/cAudioManager.cpp +++ b/cAudio/src/cAudioManager.cpp @@ -576,11 +576,16 @@ namespace cAudio cAudioMutexBasicLock lock(Mutex); cAudioVector::Type::iterator audioSourcesIter; - for(audioSourcesIter = audioSources.begin(); audioSourcesIter != audioSources.end(); audioSourcesIter++) + cAudioVector::Type deleteSources; + for(audioSourcesIter = audioSources.begin(); audioSourcesIter != audioSources.end(); ++audioSourcesIter) { if((*audioSourcesIter)) - (*audioSourcesIter)->drop(); + deleteSources.push_back(*audioSourcesIter); } + for(audioSourcesIter = deleteSources.begin(); audioSourcesIter != deleteSources.end(); ++audioSourcesIter) + (*audioSourcesIter)->drop(); + + deleteSources.clear(); audioSources.clear(); audioIndex.clear(); diff --git a/cAudio/src/cPluginManager.cpp b/cAudio/src/cPluginManager.cpp index d402871..5e217f8 100644 --- a/cAudio/src/cPluginManager.cpp +++ b/cAudio/src/cPluginManager.cpp @@ -126,7 +126,7 @@ namespace cAudio it2->first->drop(); if(DYNLIB_UNLOAD(it2->second)) { - getLogger()->logError("cPluginManager", "Plugin Error: %s.", fromUTF8(getError())); + getLogger()->logError("cPluginManager", "Plugin Error: %s.", toUTF8(getError())); } DynamicallyLoadedPlugins.erase(it2->first); }