Module: wine Branch: master Commit: 8b64db9902dffbfb2db293ba2ae61733b02fee38 URL: https://gitlab.winehq.org/wine/wine/-/commit/8b64db9902dffbfb2db293ba2ae6173...
Author: Davide Beatrici git@davidebeatrici.dev Date: Wed Jun 7 10:34:36 2023 +0200
winecoreaudio: Lock sessions in AudioClient's Start.
---
dlls/winecoreaudio.drv/mmdevdrv.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c index 3c3d9b0b1ac..4de22fa1ec6 100644 --- a/dlls/winecoreaudio.drv/mmdevdrv.c +++ b/dlls/winecoreaudio.drv/mmdevdrv.c @@ -791,24 +791,28 @@ static HRESULT WINAPI AudioClient_Start(IAudioClient3 *iface) { ACImpl *This = impl_from_IAudioClient3(iface); struct start_params params; - HRESULT hr;
TRACE("(%p)\n", This);
- if(!This->stream) + sessions_lock(); + + if(!This->stream) { + sessions_unlock(); return AUDCLNT_E_NOT_INITIALIZED; + }
params.stream = This->stream; + UNIX_CALL(start, ¶ms); - if(FAILED(hr = params.result)) - return hr;
- if(!This->timer_thread) { + if(SUCCEEDED(params.result) && !This->timer_thread) { This->timer_thread = CreateThread(NULL, 0, ca_timer_thread, This, 0, NULL); SetThreadPriority(This->timer_thread, THREAD_PRIORITY_TIME_CRITICAL); }
- return S_OK; + sessions_unlock(); + + return params.result; }
extern HRESULT WINAPI client_Stop(IAudioClient3 *iface);