From: Santino Mazza smazza@codeweavers.com
--- dlls/mf/session.c | 7 ++++++- dlls/mf/tests/mf.c | 5 ++--- 2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/dlls/mf/session.c b/dlls/mf/session.c index b5b631fb00a..2b3ac189ffb 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -3679,7 +3679,9 @@ static HRESULT WINAPI session_events_callback_Invoke(IMFAsyncCallback *iface, IM if (FAILED(hr = IMFMediaEventGenerator_EndGetEvent(event_source, result, &event))) { WARN("Failed to get event from %p, hr %#lx.\n", event_source, hr); - goto failed; + IMFMediaEventQueue_QueueEventParamVar(session->event_queue, MEError, &GUID_NULL, hr, &value); + IMFMediaEventGenerator_Release(event_source); + return hr; }
if (FAILED(hr = IMFMediaEvent_GetType(event, &event_type))) @@ -3876,7 +3878,10 @@ failed: IMFMediaEvent_Release(event);
if (FAILED(hr = IMFMediaEventGenerator_BeginGetEvent(event_source, iface, (IUnknown *)event_source))) + { WARN("Failed to re-subscribe, hr %#lx.\n", hr); + IMFMediaEventQueue_QueueEventParamVar(session->event_queue, MEError, &GUID_NULL, hr, NULL); + }
IMFMediaEventGenerator_Release(event_source);
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 07e989e577f..c289101eb7b 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -3087,7 +3087,7 @@ static void test_media_session_events(void) hr = IMFMediaSession_Start(session, &GUID_NULL, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); hr = wait_media_event_until_blocking(session, callback, MEError, 1000, &propvar); - todo_wine ok(hr == 0x80001234, "Unexpected hr %#lx.\n", hr); + ok(hr == 0x80001234, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_EMPTY, "got vt %u\n", propvar.vt); CHECK_CALLED(test_source_BeginGetEvent); CHECK_CALLED(test_source_EndGetEvent); @@ -3097,7 +3097,6 @@ static void test_media_session_events(void) propvar.vt = VT_EMPTY; hr = IMFMediaSession_Start(session, &GUID_NULL, &propvar); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine hr = wait_media_event_until_blocking(session, callback, MESessionStarted, 1000, &propvar); ok(hr == WAIT_TIMEOUT, "Unexpected hr %#lx.\n", hr); /* New commands are not handled */
@@ -3155,7 +3154,7 @@ static void test_media_session_events(void) hr = IMFMediaSource_QueueEvent(source, MESourceUnknown, &GUID_NULL, S_OK, NULL); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); hr = wait_media_event_until_blocking(session, callback, MEError, 1000, &propvar); - todo_wine ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#lx.\n", hr); + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#lx.\n", hr); ok(propvar.vt == VT_EMPTY, "got vt %u\n", propvar.vt); CHECK_CALLED(test_source_BeginGetEvent); CHECK_CALLED(test_source_EndGetEvent);