From: Bernhard Kölbl besentv@gmail.com
Nodes in the presentation topology only hold a reference to an activate object, when they are a sink anyway, see session_bind_output_nodes() for reference.
Prevents IMFMediaSink objects from getting leaked, even when IMFMediaSession_Shutdown() was called.
Signed-off-by: Bernhard Kölbl besentv@gmail.com --- dlls/mf/session.c | 2 +- dlls/mf/tests/mf.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/dlls/mf/session.c b/dlls/mf/session.c index 8b29c8487fb..219c9f859f0 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -762,7 +762,7 @@ static void session_shutdown_current_topology(struct media_session *session) WARN("Failed to shut down activation object for the sink, hr %#lx.\n", hr); IMFActivate_Release(activate); } - else if (SUCCEEDED(topology_node_get_object(node, &IID_IMFStreamSink, (void **)&stream_sink))) + if (SUCCEEDED(topology_node_get_object(node, &IID_IMFStreamSink, (void **)&stream_sink))) { if (SUCCEEDED(IMFStreamSink_GetMediaSink(stream_sink, &sink))) { diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 995f48a7eed..c476daac886 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -5494,7 +5494,7 @@ static void test_sample_grabber_shutdown(void)
hr = IMFMediaSession_Shutdown(session); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(grabber_callback->is_shutdown, "Samplegrabber wasn't shut down.\n"); + ok(grabber_callback->is_shutdown, "Samplegrabber wasn't shut down.\n"); todo_wine ok(!activate_shim->is_shutdown, "Activate Object was shut down.\n");
hr = IMFMediaSource_Shutdown(source); @@ -5506,7 +5506,7 @@ static void test_sample_grabber_shutdown(void) ref = IMFActivate_Release(&activate_shim->IMFActivate_iface); ok(!ref, "Unexpected ref %lu.\n", ref); ref = IMFMediaSession_Release(session); - todo_wine ok(!ref || broken(ref == 1) /* Windows rarely fails this. */, "Unexpected ref %lu.\n", ref); + ok(!ref || broken(ref == 1) /* Windows rarely fails this. */, "Unexpected ref %lu.\n", ref);
hr = MFShutdown(); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);