Skip to content

Commit

Permalink
fix another race condition when stopping ALL sounds
Browse files Browse the repository at this point in the history
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@9004 d7cf8633-e32d-0410-b094-e92efae38249
  • Loading branch information
divverent committed Jun 1, 2009
1 parent 526e324 commit 17f6da9
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions snd_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1480,7 +1480,7 @@ void S_StopChannel (unsigned int channel_ind, qboolean lockmutex)
// thread is currently mixing this channel
// the SndSys_LockRenderBuffer function uses such a mutex in
// threaded sound backends
if (lockmutex)
if (lockmutex && !simsound)
SndSys_LockRenderBuffer();

ch = &channels[channel_ind];
Expand All @@ -1501,7 +1501,7 @@ void S_StopChannel (unsigned int channel_ind, qboolean lockmutex)
ch->fetcher_data = NULL;
ch->sfx = NULL;
}
if (lockmutex)
if (lockmutex && !simsound)
SndSys_UnlockRenderBuffer();
}

Expand Down Expand Up @@ -1549,18 +1549,18 @@ void S_StopAllSounds (void)
// stop CD audio because it may be using a faketrack
CDAudio_Stop();

for (i = 0; i < total_channels; i++)
S_StopChannel (i, true);

total_channels = MAX_DYNAMIC_CHANNELS + NUM_AMBIENTS; // no statics
memset(channels, 0, MAX_CHANNELS * sizeof(channel_t));

// Mute the contents of the submittion buffer
if (simsound || SndSys_LockRenderBuffer ())
{
int clear;
size_t memsize;

for (i = 0; i < total_channels; i++)
S_StopChannel (i, false);

total_channels = MAX_DYNAMIC_CHANNELS + NUM_AMBIENTS; // no statics
memset(channels, 0, MAX_CHANNELS * sizeof(channel_t));

// Mute the contents of the submittion buffer
clear = (snd_renderbuffer->format.width == 1) ? 0x80 : 0;
memsize = snd_renderbuffer->maxframes * snd_renderbuffer->format.width * snd_renderbuffer->format.channels;
memset(snd_renderbuffer->ring, clear, memsize);
Expand Down

0 comments on commit 17f6da9

Please sign in to comment.