summaryrefslogtreecommitdiff
path: root/src/client/snd_openal.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/snd_openal.c')
-rw-r--r--src/client/snd_openal.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/client/snd_openal.c b/src/client/snd_openal.c
index e26375c2..23a6a67d 100644
--- a/src/client/snd_openal.c
+++ b/src/client/snd_openal.c
@@ -1895,6 +1895,7 @@ static void S_AL_MusicSourceFree( void )
{
// Release the output musicSource
S_AL_SrcUnlock(musicSourceHandle);
+ S_AL_SrcKill(musicSourceHandle);
musicSource = 0;
musicSourceHandle = -1;
}
@@ -1927,17 +1928,22 @@ S_AL_StopBackgroundTrack
static
void S_AL_StopBackgroundTrack( void )
{
+ int numBuffers;
+
if(!musicPlaying)
return;
// Stop playing
qalSourceStop(musicSource);
- // De-queue the musicBuffers
- qalSourceUnqueueBuffers(musicSource, NUM_MUSIC_BUFFERS, musicBuffers);
-
- // Destroy the musicBuffers
- qalDeleteBuffers(NUM_MUSIC_BUFFERS, musicBuffers);
+ // Un-queue any buffers, and delete them
+ qalGetSourcei( musicSource, AL_BUFFERS_PROCESSED, &numBuffers );
+ while( numBuffers-- )
+ {
+ ALuint buffer;
+ qalSourceUnqueueBuffers(musicSource, 1, &buffer);
+ qalDeleteBuffers(1, &buffer);
+ }
// Free the musicSource
S_AL_MusicSourceFree();