diff --git a/mangle b/mangle index 932465442b..3324f6494c 160000 --- a/mangle +++ b/mangle @@ -1 +1 @@ -Subproject commit 932465442bd97c3bcb3a8630414c16bdd887fa9f +Subproject commit 3324f6494c021e3dc69cd76ace5ff25a52e4bcce diff --git a/sound/sndmanager.cpp b/sound/sndmanager.cpp index fe5ad80915..10a503bf4e 100644 --- a/sound/sndmanager.cpp +++ b/sound/sndmanager.cpp @@ -149,15 +149,26 @@ public: // Update all sounds void updateAll() { - for(ManagedSound *s = list.getHead(); s != NULL; s=s->next) - s->update(); + ManagedSound *s = list.getHead(); + while(s) + { + ManagedSound *cur = s; + // Propagate first, since update() may delete object + s = s->next; + cur->update(); + } } // Detach and unlock all sounds void detachAll() { - for(ManagedSound *s = list.getHead(); s != NULL; s=s->next) - s->detach(); + ManagedSound *s = list.getHead(); + while(s) + { + ManagedSound *cur = s; + s = s->next; + cur->detach(); + } } };