diff --git a/src/modules/audio/openal/Pool.cpp b/src/modules/audio/openal/Pool.cpp index abdbc3fad..87e0cecf8 100644 --- a/src/modules/audio/openal/Pool.cpp +++ b/src/modules/audio/openal/Pool.cpp @@ -106,9 +106,6 @@ namespace openal // Insert into map of playing sources. playing.insert(std::pair(source, s)); - - // Retain the source. - source->retain(); } UNLOCK(mutex); @@ -124,7 +121,6 @@ namespace openal { available.push(s); playing.erase(source); - source->release(); } UNLOCK(mutex); } diff --git a/src/modules/audio/openal/Source.cpp b/src/modules/audio/openal/Source.cpp index 6532e639b..021e0cd6f 100644 --- a/src/modules/audio/openal/Source.cpp +++ b/src/modules/audio/openal/Source.cpp @@ -43,6 +43,7 @@ namespace openal Source::~Source() { + stop(); } void Source::play() @@ -74,6 +75,7 @@ namespace openal alSourceStop(source); audible->stop(this); source = 0; + pool->release(this); } } @@ -113,6 +115,12 @@ namespace openal void Source::update() { + if(isFinished()) + { + stop(); + return; + } + if(audible != 0) audible->update(this); }