Jörg Höhle : mmdevapi: After GetBuffer, refuse Reset, but Start/Stop is ok.
Alexandre Julliard
julliard at winehq.org
Wed Aug 24 14:05:18 CDT 2011
Module: wine
Branch: master
Commit: 541075c3db2829031d783e54aaa1b639fb23155b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=541075c3db2829031d783e54aaa1b639fb23155b
Author: Jörg Höhle <hoehle at 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;
More information about the wine-cvs
mailing list