From: Conor McCarthy <cmccarthy(a)codeweavers.com> --- dlls/mf/tests/mf.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 3b75ef00fea..968f3d5e521 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -1469,6 +1469,8 @@ static ULONG WINAPI test_media_stream_Release(IMFMediaStream *iface) if (stream->delayed_sample) IMFSample_Release(stream->delayed_sample); IMFMediaEventQueue_Release(stream->event_queue); + if (stream->source) + IMFMediaSource_Release(stream->source); free(stream); } @@ -1922,11 +1924,26 @@ static HRESULT WINAPI test_source_Shutdown(IMFMediaSource *iface) { struct test_source *source = impl_test_source_from_IMFMediaSource(iface); HRESULT hr; + UINT i; add_object_state(&actual_object_state_record, SOURCE_SHUTDOWN); hr = IMFMediaEventQueue_Shutdown(source->event_queue); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + for (i = 0; i < source->stream_count; ++i) + { + struct test_media_stream *stream = source->streams[i]; + + if (stream) + { + /* The session typically captures stream events, so the stream event queue + * holds a stream reference that can only be released by queue shutdown. */ + hr = IMFMediaEventQueue_Shutdown(stream->event_queue); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + IMFMediaStream_Release(&stream->IMFMediaStream_iface); + source->streams[i] = NULL; + } + } return S_OK; } @@ -7040,7 +7057,6 @@ static void test_media_session_Start(void) /* sometimes briefly leaking */ Sleep(20); ref = IMFMediaSession_Release(session); - todo_wine ok(!ref || broken(!!ref), "Unexpected refcount %ld.\n", ref); IMFPresentationClock_Release(presentation_clock); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6783