A bit more robust against wave???Open failures.
diff --git a/dlls/dsound/dsound_main.c b/dlls/dsound/dsound_main.c index de8aca1..5fe5886 100644 --- a/dlls/dsound/dsound_main.c +++ b/dlls/dsound/dsound_main.c
@@ -1186,12 +1186,13 @@ IDsDriverBuffer_Release(primarybuf->hwbuf); waveOutClose(dsb->dsound->hwo); dsb->dsound->hwo = 0; - waveOutOpen(&(dsb->dsound->hwo), dsb->dsound->drvdesc.dnDevNode, - &(primarybuf->wfx), (DWORD)DSOUND_callback, (DWORD)dsb->dsound, - CALLBACK_FUNCTION | WAVE_DIRECTSOUND); - err = IDsDriver_CreateSoundBuffer(dsb->dsound->driver,&(dsb->wfx),dsb->dsbd.dwFlags,0, - &(dsb->buflen),&(dsb->buffer), - (LPVOID)&(dsb->hwbuf)); + err = mmErr(waveOutOpen(&(dsb->dsound->hwo), dsb->dsound->drvdesc.dnDevNode, + &(primarybuf->wfx), (DWORD)DSOUND_callback, (DWORD)dsb->dsound, + CALLBACK_FUNCTION | WAVE_DIRECTSOUND)); + if (err == DS_OK) + err = IDsDriver_CreateSoundBuffer(dsb->dsound->driver,&(dsb->wfx),dsb->dsbd.dwFlags,0, + &(dsb->buflen),&(dsb->buffer), + (LPVOID)&(dsb->hwbuf)); } } else @@ -1253,10 +1254,11 @@ DSOUND_PrimaryClose(primarybuf); waveOutClose(This->dsound->hwo); This->dsound->hwo = 0; - waveOutOpen(&(This->dsound->hwo), This->dsound->drvdesc.dnDevNode, - &(primarybuf->wfx), (DWORD)DSOUND_callback, (DWORD)This->dsound, - CALLBACK_FUNCTION | WAVE_DIRECTSOUND); - DSOUND_PrimaryOpen(primarybuf); + err = mmErr(waveOutOpen(&(This->dsound->hwo), This->dsound->drvdesc.dnDevNode, + &(primarybuf->wfx), (DWORD)DSOUND_callback, (DWORD)This->dsound, + CALLBACK_FUNCTION | WAVE_DIRECTSOUND)); + if (err == DS_OK) + DSOUND_PrimaryOpen(primarybuf); } if (primarybuf->hwbuf) { err = IDsDriverBuffer_SetFormat(primarybuf->hwbuf, &(primarybuf->wfx)); @@ -1269,13 +1271,14 @@ if (primarybuf->state == STATE_PLAYING) primarybuf->state = STATE_STARTING; else if (primarybuf->state == STATE_STOPPING) primarybuf->state = STATE_STOPPED; } + /* FIXME: should we set err back to DS_OK in all cases ? */ } DSOUND_RecalcFormat(primarybuf); LeaveCriticalSection(&(This->dsound->lock)); /* **** */ - return DS_OK; + return err; } static HRESULT WINAPI IDirectSoundBufferImpl_SetVolume(