Browse Source

Fixed immortal Sources.

rude 16 years ago
parent
commit
3df85df1c1
2 changed files with 8 additions and 4 deletions
  1. 0 4
      src/modules/audio/openal/Pool.cpp
  2. 8 0
      src/modules/audio/openal/Source.cpp

+ 0 - 4
src/modules/audio/openal/Pool.cpp

@@ -106,9 +106,6 @@ namespace openal
 
 
 			// Insert into map of playing sources.
 			// Insert into map of playing sources.
 			playing.insert(std::pair<love::audio::Source *, ALuint>(source, s));
 			playing.insert(std::pair<love::audio::Source *, ALuint>(source, s));
-
-			// Retain the source.
-			source->retain();
 		}
 		}
 		UNLOCK(mutex);
 		UNLOCK(mutex);
 
 
@@ -124,7 +121,6 @@ namespace openal
 		{
 		{
 			available.push(s);
 			available.push(s);
 			playing.erase(source);
 			playing.erase(source);
-			source->release();
 		}
 		}
 		UNLOCK(mutex);
 		UNLOCK(mutex);
 	}
 	}

+ 8 - 0
src/modules/audio/openal/Source.cpp

@@ -43,6 +43,7 @@ namespace openal
 
 
 	Source::~Source()
 	Source::~Source()
 	{
 	{
+		stop();
 	}
 	}
 
 
 	void Source::play()
 	void Source::play()
@@ -74,6 +75,7 @@ namespace openal
 			alSourceStop(source);
 			alSourceStop(source);
 			audible->stop(this);
 			audible->stop(this);
 			source = 0;
 			source = 0;
+			pool->release(this);
 		}
 		}
 	}
 	}
 
 
@@ -113,6 +115,12 @@ namespace openal
 
 
 	void Source::update()
 	void Source::update()
 	{
 	{
+		if(isFinished())
+		{
+			stop();
+			return;
+		}
+
 		if(audible != 0)
 		if(audible != 0)
 			audible->update(this);
 			audible->update(this);
 	}
 	}