From caf46ad430749adb2ac042d86a9c2b5d755af4e0 Mon Sep 17 00:00:00 2001 From: Bart van Strien Date: Mon, 26 Sep 2011 23:21:53 +0200 Subject: [PATCH] Prevent infinite loop when destroying sources (issue #250) --- src/modules/audio/openal/Pool.cpp | 2 +- src/modules/audio/openal/Source.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/modules/audio/openal/Pool.cpp b/src/modules/audio/openal/Pool.cpp index e20cbd05e..eda5a973f 100644 --- a/src/modules/audio/openal/Pool.cpp +++ b/src/modules/audio/openal/Pool.cpp @@ -271,9 +271,9 @@ namespace openal if(i != playing.end()) { source->stopAtomic(); - source->release(); available.push(i->second); playing.erase(i++); + source->release(); return true; } diff --git a/src/modules/audio/openal/Source.cpp b/src/modules/audio/openal/Source.cpp index 399d271da..60bc8f1a2 100644 --- a/src/modules/audio/openal/Source.cpp +++ b/src/modules/audio/openal/Source.cpp @@ -65,7 +65,8 @@ namespace openal Source::~Source() { - pool->stop(this); + if (valid) + pool->stop(this); alDeleteBuffers((type == TYPE_STATIC) ? 1 : MAX_BUFFERS, buffers); if (decoder) decoder->release();