From 3df85df1c168488bf6dc04415043cabd541651f2 Mon Sep 17 00:00:00 2001 From: rude Date: Mon, 14 Sep 2009 21:47:08 +0200 Subject: [PATCH] Fixed immortal Sources. --- src/modules/audio/openal/Pool.cpp | 4 ---- src/modules/audio/openal/Source.cpp | 8 ++++++++ 2 files changed, 8 insertions(+), 4 deletions(-) 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); }