I think we need to be able to buffer multiple state transitions. Consider the following diff on top of patch 1/3, which mostly passes the tests:
diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c index ec3738ad4a4..6995b231633 100644 --- a/dlls/wmvcore/tests/wmvcore.c +++ b/dlls/wmvcore/tests/wmvcore.c @@ -1901,6 +1901,8 @@ static void run_async_reader(IWMReader *reader, IWMReaderAdvanced2 *advanced, st ok(!ret, "Wait timed out.\n"); ok(callback->got_eof == 1, "Got %u WMT_EOF callbacks.\n", callback->got_eof);
+ hr = IWMReader_Stop(reader); + ok(hr == S_OK, "Got hr %#lx.\n", hr); hr = IWMReader_Stop(reader); ok(hr == S_OK, "Got hr %#lx.\n", hr); ret = WaitForSingleObject(callback->got_stopped, 0); @@ -1908,6 +1910,9 @@ static void run_async_reader(IWMReader *reader, IWMReaderAdvanced2 *advanced, st SetEvent(callback->expect_stopped); ret = WaitForSingleObject(callback->got_stopped, 1000); ok(!ret, "Wait timed out.\n"); + SetEvent(callback->expect_stopped); + ret = WaitForSingleObject(callback->got_stopped, 1000); + ok(!ret, "Wait timed out.\n");
ok(!outstanding_buffers, "Got %ld outstanding buffers.\n", outstanding_buffers); }