Module: wine Branch: master Commit: 3838a770c15a82e0996f09d533c83a83ba2537cc URL: http://source.winehq.org/git/wine.git/?a=commit;h=3838a770c15a82e0996f09d533...
Author: Maarten Lankhorst m.b.lankhorst@gmail.com Date: Sun Aug 26 17:20:21 2007 +0200
dsound: Make sure waveOutClose is only called when using mmsystem.
---
dlls/dsound/primary.c | 12 ++++++++---- 1 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/dlls/dsound/primary.c b/dlls/dsound/primary.c index 2470675..44b453a 100644 --- a/dlls/dsound/primary.c +++ b/dlls/dsound/primary.c @@ -81,15 +81,16 @@ static HRESULT DSOUND_PrimaryOpen(DirectSoundDevice *device) (LPVOID*)&(device->hwbuf));
if (err != DS_OK) { - WARN("IDsDriver_CreateSoundBuffer failed, falling back to waveout\n"); + WARN("IDsDriver_CreateSoundBuffer failed (%08x), falling back to waveout\n", err); /* Wine-only: close wine directsound driver, then reopen without WAVE_DIRECTSOUND */ - device->drvdesc.dwFlags = DSDDESC_DOMMSYSTEMOPEN | DSDDESC_DOMMSYSTEMSETFORMAT; IDsDriver_Close(device->driver); - waveOutClose(device->hwo); + if (device->drvdesc.dwFlags & DSDDESC_DOMMSYSTEMOPEN) + waveOutClose(device->hwo); IDsDriver_Release(device->driver); device->driver = NULL; device->buffer = NULL; device->hwo = 0; + device->drvdesc.dwFlags = DSDDESC_DOMMSYSTEMOPEN | DSDDESC_DOMMSYSTEMSETFORMAT; err = mmErr(waveOutOpen(&(device->hwo), device->drvdesc.dnDevNode, device->pwfx, (DWORD_PTR)DSOUND_callback, (DWORD)device, CALLBACK_FUNCTION)); if (err != DS_OK) { @@ -207,8 +208,11 @@ static void DSOUND_PrimaryClose(DirectSoundDevice *device) /* clear the queue */ device->pwqueue = 0; } else { - if (IDsDriverBuffer_Release(device->hwbuf) == 0) + ULONG ref = IDsDriverBuffer_Release(device->hwbuf); + if (!ref) device->hwbuf = 0; + else + ERR("Still %d references on primary buffer, refcount leak?\n", ref); } }