From: Davide Beatrici git@davidebeatrici.dev
--- dlls/winepulse.drv/mmdevdrv.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c index def79d7f961..726ffeb86ad 100644 --- a/dlls/winepulse.drv/mmdevdrv.c +++ b/dlls/winepulse.drv/mmdevdrv.c @@ -1024,6 +1024,7 @@ static HRESULT WINAPI AudioClient_GetService(IAudioClient3 *iface, REFIID riid, void **ppv) { ACImpl *This = impl_from_IAudioClient3(iface); + BOOLEAN add_ref = TRUE;
TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), ppv);
@@ -1050,6 +1051,8 @@ static HRESULT WINAPI AudioClient_GetService(IAudioClient3 *iface, REFIID riid, IsEqualIID(riid, &IID_IChannelAudioVolume) || IsEqualIID(riid, &IID_ISimpleAudioVolume)) { if (!This->session_wrapper) { + add_ref = FALSE; + This->session_wrapper = AudioSessionWrapper_Create(This); if (!This->session_wrapper) return E_OUTOFMEMORY; @@ -1063,7 +1066,8 @@ static HRESULT WINAPI AudioClient_GetService(IAudioClient3 *iface, REFIID riid, }
if (*ppv) { - IUnknown_AddRef((IUnknown*)*ppv); + if (add_ref) + IUnknown_AddRef((IUnknown*)*ppv); return S_OK; }
@@ -1130,7 +1134,7 @@ static AudioSessionWrapper *AudioSessionWrapper_Create(ACImpl *client) ret->ISimpleAudioVolume_iface.lpVtbl = &SimpleAudioVolume_Vtbl; ret->IChannelAudioVolume_iface.lpVtbl = &ChannelAudioVolume_Vtbl;
- ret->ref = !client; + ret->ref = 1;
ret->client = client; if (client) {