Nikolay Sivov : mf: Partially implement Shutdown() for media session.
Alexandre Julliard
julliard at winehq.org
Fri May 31 15:53:31 CDT 2019
Module: wine
Branch: master
Commit: 33a4151bbe13d012131270b69876a5863bdbd2ce
URL: https://source.winehq.org/git/wine.git/?a=commit;h=33a4151bbe13d012131270b69876a5863bdbd2ce
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Fri May 31 13:11:28 2019 +0300
mf: Partially implement Shutdown() for media session.
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
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 e92ae40..0c283c4 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 f37ac7c..bae8020 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);
}
More information about the wine-cvs
mailing list