Use some black magic (GOTO) to fix #915. See comments in code for explanation.

Originally committed to SVN as r3732.
This commit is contained in:
Niels Martin Hansen 2009-10-26 20:21:00 +00:00
parent 99659ef5a4
commit a0bfd9ff7c
1 changed files with 9 additions and 1 deletions

View File

@ -328,6 +328,13 @@ void DirectSoundPlayer2Thread::Run()
ResetEvent(is_playing);
playback_should_be_running = false;
}
else
{
// If the user is dragging the start or end point in the audio display
// the set end frame events might come in faster than the timeouts happen
// and then new data never get filled into the buffer. See bug #915.
goto do_fill_buffer;
}
break;
}
@ -337,7 +344,7 @@ void DirectSoundPlayer2Thread::Run()
// We aren't thread safe right now, filling the buffers grabs volume directly
// from the field set by the controlling thread, but it shouldn't be a major
// problem if race conditions do occur, just some momentary distortion.
break;
goto do_fill_buffer;
}
case WAIT_OBJECT_0+4:
@ -351,6 +358,7 @@ void DirectSoundPlayer2Thread::Run()
}
case WAIT_TIMEOUT:
do_fill_buffer:
{
// Time to fill more into buffer