From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winepulse.drv/mmdevdrv.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c index 04ec9a6498a..51b6d12d96b 100644 --- a/dlls/winepulse.drv/mmdevdrv.c +++ b/dlls/winepulse.drv/mmdevdrv.c @@ -1033,16 +1033,24 @@ static HRESULT WINAPI AudioClient_GetService(IAudioClient3 *iface, REFIID riid, return E_POINTER; *ppv = NULL;
- if (!This->stream) + sessions_lock(); + + if (!This->stream) { + sessions_unlock(); return AUDCLNT_E_NOT_INITIALIZED; + }
if (IsEqualIID(riid, &IID_IAudioRenderClient)) { - if (This->dataflow != eRender) + if (This->dataflow != eRender) { + sessions_unlock(); return AUDCLNT_E_WRONG_ENDPOINT_TYPE; + } *ppv = &This->IAudioRenderClient_iface; } else if (IsEqualIID(riid, &IID_IAudioCaptureClient)) { - if (This->dataflow != eCapture) + if (This->dataflow != eCapture) { + sessions_unlock(); return AUDCLNT_E_WRONG_ENDPOINT_TYPE; + } *ppv = &This->IAudioCaptureClient_iface; } else if (IsEqualIID(riid, &IID_IAudioClock)) { *ppv = &This->IAudioClock_iface; @@ -1055,8 +1063,10 @@ static HRESULT WINAPI AudioClient_GetService(IAudioClient3 *iface, REFIID riid, add_ref = FALSE;
This->session_wrapper = session_wrapper_create(This); - if (!This->session_wrapper) + if (!This->session_wrapper) { + sessions_unlock(); return E_OUTOFMEMORY; + } } if (IsEqualIID(riid, &IID_IAudioSessionControl)) *ppv = &This->session_wrapper->IAudioSessionControl2_iface; @@ -1069,9 +1079,12 @@ static HRESULT WINAPI AudioClient_GetService(IAudioClient3 *iface, REFIID riid, if (*ppv) { if (add_ref) IUnknown_AddRef((IUnknown*)*ppv); + sessions_unlock(); return S_OK; }
+ sessions_unlock(); + FIXME("stub %s\n", debugstr_guid(riid)); return E_NOINTERFACE; }