=?UTF-8?Q?J=C3=B6rg=20H=C3=B6hle=20?=: wineoss: EAGAIN (OSS buffer full) is a regular situation.

Alexandre Julliard julliard at winehq.org
Thu Sep 22 13:39:49 CDT 2011


Module: wine
Branch: master
Commit: 55efce6c9ca7fd13f4e4362f7fc8fd456d803ea2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=55efce6c9ca7fd13f4e4362f7fc8fd456d803ea2

Author: Jörg Höhle <hoehle at users.sourceforge.net>
Date:   Wed Sep 21 10:42:16 2011 +0200

wineoss: EAGAIN (OSS buffer full) is a regular situation.

---

 dlls/wineoss.drv/mmdevdrv.c |   10 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c
index 562a674..33438e4 100644
--- a/dlls/wineoss.drv/mmdevdrv.c
+++ b/dlls/wineoss.drv/mmdevdrv.c
@@ -1224,6 +1224,7 @@ static void oss_write_data(ACImpl *This)
 
     written = write(This->fd, buf, to_write * This->fmt->nBlockAlign);
     if(written < 0){
+        /* EAGAIN is OSS buffer full, log that too */
         WARN("write failed: %d (%s)\n", errno, strerror(errno));
         return;
     }
@@ -1729,9 +1730,12 @@ static HRESULT WINAPI AudioRenderClient_ReleaseBuffer(
         w_bytes = write(This->fd, buffer,
                 written_frames * This->fmt->nBlockAlign);
         if(w_bytes < 0){
-            LeaveCriticalSection(&This->lock);
-            WARN("write failed: %d (%s)\n", errno, strerror(errno));
-            return E_FAIL;
+            if(errno != EAGAIN){
+                LeaveCriticalSection(&This->lock);
+                WARN("write failed: %d (%s)\n", errno, strerror(errno));
+                return E_FAIL;
+            }else /* OSS buffer full */
+                w_bytes = 0;
         }
         w_frames = w_bytes / This->fmt->nBlockAlign;
         This->inbuf_frames += w_frames;




More information about the wine-cvs mailing list