-- v6: mf: Don't leak sink in session_get_renderer_node_service(). mf: Clear queued topologies on session shutdown.
From: Bernhard Kölbl besentv@gmail.com
Programs might expect objects inside the queued toplogy to be freed, before they eventually call release on the session itself.
This fixes reference leaks to stored objects in queued topology nodes, even when IMFMediaSession_Shutdown() was called.
Signed-off-by: Bernhard Kölbl besentv@gmail.com --- dlls/mf/session.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/dlls/mf/session.c b/dlls/mf/session.c index 8b29c8487fb..3641cc74b83 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -2225,6 +2225,7 @@ static HRESULT WINAPI mfsession_Shutdown(IMFMediaSession *iface) IMFPresentationClock_Release(session->clock); session->clock = NULL; session_clear_presentation(session); + session_clear_queued_topologies(session); session_submit_simple_command(session, SESSION_CMD_SHUTDOWN); } LeaveCriticalSection(&session->cs);
From: Bernhard Kölbl besentv@gmail.com
Signed-off-by: Bernhard Kölbl besentv@gmail.com --- dlls/mf/session.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/dlls/mf/session.c b/dlls/mf/session.c index 3641cc74b83..555a71dcdf7 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -2397,6 +2397,7 @@ static HRESULT session_get_renderer_node_service(struct media_session *session, if (FAILED(hr = MFGetService((IUnknown *)sink, service, riid, obj))) WARN("Failed to get service from renderer node, %#lx.\n", hr); } + IMFMediaSink_Release(sink); } IMFStreamSink_Release(stream_sink); }
v3: Only pull commit 2 and 3, and commit desc rewording.
This merge request was approved by Nikolay Sivov.
On Wed Jun 14 16:06:06 2023 +0000, Nikolay Sivov wrote:
How IActivate shutdown works, I'll have to try something myself.
I opened !3067, so we can continue discussing this there.