- Fixed: The high level sound code must not rely on FMod immediately returning
the sound channel data when a sound is being stopped. This caused an endless loop when changing levels with Strife's Flamethrower active. SVN r1275 (trunk)
This commit is contained in:
parent
b455227342
commit
4c6b7f6752
2 changed files with 16 additions and 8 deletions
|
|
@ -318,10 +318,14 @@ void S_Shutdown ()
|
|||
{
|
||||
FSoundChan *chan, *next;
|
||||
|
||||
while (Channels != NULL)
|
||||
chan = Channels;
|
||||
while (chan != NULL)
|
||||
{
|
||||
S_StopChannel(Channels);
|
||||
next = chan->NextChan;
|
||||
S_StopChannel(chan);
|
||||
chan = next;
|
||||
}
|
||||
|
||||
GSnd->UpdateSounds();
|
||||
for (chan = FreeChannels; chan != NULL; chan = next)
|
||||
{
|
||||
|
|
@ -1441,9 +1445,13 @@ void S_StopSound (const FPolyObj *poly, int channel)
|
|||
void S_StopAllChannels ()
|
||||
{
|
||||
SN_StopAllSequences();
|
||||
while (Channels != NULL)
|
||||
|
||||
FSoundChan *chan = Channels;
|
||||
while (chan != NULL)
|
||||
{
|
||||
S_StopChannel(Channels);
|
||||
FSoundChan *next = chan->NextChan;
|
||||
S_StopChannel(chan);
|
||||
chan = next;
|
||||
}
|
||||
GSnd->UpdateSounds();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue