Module: wine Branch: master Commit: 541075c3db2829031d783e54aaa1b639fb23155b URL: http://source.winehq.org/git/wine.git/?a=commit;h=541075c3db2829031d783e54aa...
Author: Jörg Höhle hoehle@users.sourceforge.net Date: Wed Aug 10 18:07:51 2011 +0200
mmdevapi: After GetBuffer, refuse Reset, but Start/Stop is ok.
---
dlls/winealsa.drv/mmdevdrv.c | 5 +++++ dlls/winecoreaudio.drv/mmdevdrv.c | 5 +++++ dlls/wineoss.drv/mmdevdrv.c | 5 +++++ 3 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c index 8ea2f09..01fe4fd 100644 --- a/dlls/winealsa.drv/mmdevdrv.c +++ b/dlls/winealsa.drv/mmdevdrv.c @@ -1753,6 +1753,11 @@ static HRESULT WINAPI AudioClient_Reset(IAudioClient *iface) return AUDCLNT_E_NOT_STOPPED; }
+ if(This->buf_state != NOT_LOCKED){ + LeaveCriticalSection(&This->lock); + return AUDCLNT_E_BUFFER_OPERATION_PENDING; + } + This->held_frames = 0; This->written_frames = 0; This->lcl_offs_frames = 0; diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c index fcb337d..8311a29 100644 --- a/dlls/winecoreaudio.drv/mmdevdrv.c +++ b/dlls/winecoreaudio.drv/mmdevdrv.c @@ -1391,6 +1391,11 @@ static HRESULT WINAPI AudioClient_Reset(IAudioClient *iface) return AUDCLNT_E_NOT_STOPPED; }
+ if(This->getbuf_last){ + OSSpinLockUnlock(&This->lock); + return AUDCLNT_E_BUFFER_OPERATION_PENDING; + } + This->written_frames = 0;
hr = AudioClock_GetPosition_nolock(This, &This->last_time, NULL, TRUE); diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c index f962f8a..0e44842 100644 --- a/dlls/wineoss.drv/mmdevdrv.c +++ b/dlls/wineoss.drv/mmdevdrv.c @@ -1379,6 +1379,11 @@ static HRESULT WINAPI AudioClient_Reset(IAudioClient *iface) return AUDCLNT_E_NOT_STOPPED; }
+ if(This->buf_state != NOT_LOCKED){ + LeaveCriticalSection(&This->lock); + return AUDCLNT_E_BUFFER_OPERATION_PENDING; + } + This->written_frames = 0; This->inbuf_frames = 0; This->held_frames = 0;