From ee7b31729355c5faa538269a7f93c1d5633a604c Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Fri, 3 Apr 2020 19:25:11 +0300 Subject: [PATCH] mfreadwrite: Block recurring flush calls in async mode when flush is pending. Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- dlls/mfreadwrite/reader.c | 3 +++ dlls/mfreadwrite/tests/mfplat.c | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/dlls/mfreadwrite/reader.c b/dlls/mfreadwrite/reader.c index 17d274ebc8a..e46b6003ebc 100644 --- a/dlls/mfreadwrite/reader.c +++ b/dlls/mfreadwrite/reader.c @@ -1710,6 +1710,9 @@ static HRESULT source_reader_flush_async(struct source_reader *reader, unsigned unsigned int stream_index; HRESULT hr; + if (reader->flags & SOURCE_READER_FLUSHING) + return MF_E_INVALIDREQUEST; + switch (index) { case MF_SOURCE_READER_FIRST_VIDEO_STREAM: diff --git a/dlls/mfreadwrite/tests/mfplat.c b/dlls/mfreadwrite/tests/mfplat.c index e03d74981ad..c35cfa3c0c4 100644 --- a/dlls/mfreadwrite/tests/mfplat.c +++ b/dlls/mfreadwrite/tests/mfplat.c @@ -951,6 +951,13 @@ todo_wine hr = IMFSourceReader_ReadSample(reader, 0, 0, NULL, NULL, NULL, &sample); ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr); + /* Flush() arguments validation. */ + hr = IMFSourceReader_Flush(reader, 123); + ok(hr == MF_E_INVALIDSTREAMNUMBER, "Unexpected hr %#x.\n", hr); + + hr = IMFSourceReader_ReadSample(reader, 0, 0, NULL, NULL, NULL, NULL); + ok(hr == MF_E_NOTACCEPTING, "Unexpected hr %#x.\n", hr); + IMFSourceReader_Release(reader); }