[PATCH 1/6] mf: Partially implement Shutdown() for media session.

Nikolay Sivov nsivov at codeweavers.com
Fri May 31 05:11:28 CDT 2019


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/mf/session.c  | 14 ++++++++++++--
 dlls/mf/tests/mf.c |  1 -
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/dlls/mf/session.c b/dlls/mf/session.c
index e92ae401f6..0c283c4392 100644
--- a/dlls/mf/session.c
+++ b/dlls/mf/session.c
@@ -62,6 +62,7 @@ struct media_session
     IMFMediaEventQueue *event_queue;
     IMFPresentationClock *clock;
     struct list topologies;
+    BOOL is_shut_down;
     CRITICAL_SECTION cs;
 };
 
@@ -412,12 +413,21 @@ static HRESULT WINAPI mfsession_Close(IMFMediaSession *iface)
 static HRESULT WINAPI mfsession_Shutdown(IMFMediaSession *iface)
 {
     struct media_session *session = impl_from_IMFMediaSession(iface);
+    HRESULT hr = S_OK;
 
     FIXME("(%p)\n", iface);
 
-    IMFMediaEventQueue_Shutdown(session->event_queue);
+    EnterCriticalSection(&session->cs);
+    if (session->is_shut_down)
+        hr = MF_E_SHUTDOWN;
+    else
+    {
+        session->is_shut_down = TRUE;
+        IMFMediaEventQueue_Shutdown(session->event_queue);
+    }
+    LeaveCriticalSection(&session->cs);
 
-    return E_NOTIMPL;
+    return hr;
 }
 
 static HRESULT WINAPI mfsession_GetClock(IMFMediaSession *iface, IMFClock **clock)
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c
index f37ac7c3ff..bae80203c5 100644
--- a/dlls/mf/tests/mf.c
+++ b/dlls/mf/tests/mf.c
@@ -944,7 +944,6 @@ static void test_session_events(IMFMediaSession *session)
 
     /* Shutdown behavior. */
     hr = IMFMediaSession_Shutdown(session);
-todo_wine
     ok(hr == S_OK, "Failed to shut down, hr %#x.\n", hr);
 }
 
-- 
2.20.1




More information about the wine-devel mailing list