From: Paul Gofman pgofman@codeweavers.com
--- dlls/quartz/dsoundrender.c | 3 ++- dlls/quartz/tests/dsoundrender.c | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/dlls/quartz/dsoundrender.c b/dlls/quartz/dsoundrender.c index 42d5f5cdd25..9720fd974a4 100644 --- a/dlls/quartz/dsoundrender.c +++ b/dlls/quartz/dsoundrender.c @@ -381,7 +381,7 @@ static DWORD WINAPI render_thread_run(void *arg) { BOOL complete_pending;
- complete_pending = filter->eos_complete_pending; + complete_pending = WaitForSingleObject(filter->flush_event, 0) && filter->eos_complete_pending; filter->eos_complete_pending = FALSE; LeaveCriticalSection(&filter->render_cs); /* Clear the buffer. */ @@ -555,6 +555,7 @@ static HRESULT dsound_render_sink_end_flush(struct strmbase_sink *iface) struct dsound_render *filter = impl_from_strmbase_pin(&iface->pin);
EnterCriticalSection(&filter->filter.stream_cs); + filter->eos_complete_pending = FALSE; if (filter->eos && filter->filter.state != State_Stopped) { WaitForSingleObject(filter->render_thread, INFINITE); diff --git a/dlls/quartz/tests/dsoundrender.c b/dlls/quartz/tests/dsoundrender.c index 6486a152f32..b036050ff69 100644 --- a/dlls/quartz/tests/dsoundrender.c +++ b/dlls/quartz/tests/dsoundrender.c @@ -1168,8 +1168,8 @@ static void test_eos(IPin *pin, IMemInputPin *input, IMediaSeeking *seeking, IMe ok(!ret, "Got unexpected EC_COMPLETE.\n"); hr = IPin_EndOfStream(pin); todo_wine ok(hr == S_FALSE, "Got hr %#lx.\n", hr); - ret = check_ec_complete(eventsrc, 100); - todo_wine ok(!ret, "Got unexpected EC_COMPLETE.\n"); + ret = check_ec_complete(eventsrc, 0); + ok(!ret, "Got unexpected EC_COMPLETE.\n"); hr = IPin_EndFlush(pin); ok(hr == S_OK, "Got hr %#lx.\n", hr); ret = check_ec_complete(eventsrc, 0); @@ -1210,7 +1210,7 @@ static void test_eos(IPin *pin, IMemInputPin *input, IMediaSeeking *seeking, IMe hr = IPin_EndFlush(pin); ok(hr == S_OK, "Got hr %#lx.\n", hr); ret = check_ec_complete(eventsrc, 0); - todo_wine ok(!ret, "Got unexpected EC_COMPLETE.\n"); + ok(!ret, "Got unexpected EC_COMPLETE.\n");
hr = send_frame(input); ok(hr == S_OK, "Got hr %#lx.\n", hr);