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); ResetEvent(is_playing);
playback_should_be_running = false; 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; break;
} }
@ -337,7 +344,7 @@ void DirectSoundPlayer2Thread::Run()
// We aren't thread safe right now, filling the buffers grabs volume directly // 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 // 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. // problem if race conditions do occur, just some momentary distortion.
break; goto do_fill_buffer;
} }
case WAIT_OBJECT_0+4: case WAIT_OBJECT_0+4:
@ -351,6 +358,7 @@ void DirectSoundPlayer2Thread::Run()
} }
case WAIT_TIMEOUT: case WAIT_TIMEOUT:
do_fill_buffer:
{ {
// Time to fill more into buffer // Time to fill more into buffer