[PATCH v2] winegstreamer: Do not block forever if EOS races with command queue.

Giovanni Mascellani gmascellani at codeweavers.com
Wed Feb 9 02:40:52 CST 2022


Currently, the winegstreamer media source checks for EOS when
RequestSample() is called, but doesn't handle the cases when EOS
is detected between the RequestSample() call and the moment when
the request is popped from the command queue and serviced. This
can result in the media source waiting forever for a sample and
get stuck.

This commit fixes the bug by adding a check for EOS in
wait_for_event().

This commit fixes Medieval Dynasty hanging on developer logos on
the Steam Deck.

Signed-off-by: Giovanni Mascellani <gmascellani at codeweavers.com>
---
 dlls/winegstreamer/media_source.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c
index 85ec31d2498..ca8f92b07ea 100644
--- a/dlls/winegstreamer/media_source.c
+++ b/dlls/winegstreamer/media_source.c
@@ -534,6 +534,12 @@ static void wait_on_sample(struct media_stream *stream, IUnknown *token)
 
     TRACE("%p, %p\n", stream, token);
 
+    if (stream->eos)
+    {
+        IMFMediaEventQueue_QueueEventParamVar(stream->event_queue, MEError, &GUID_NULL, MF_E_END_OF_STREAM, &empty_var);
+        return;
+    }
+
     for (;;)
     {
         if (!wg_parser_stream_get_event(stream->wg_stream, &event))
-- 
2.34.1




More information about the wine-devel mailing list