[PATCH] wineoss.drv: Cap reported OSS fill level to expected level

Andrew Eikum aeikum at codeweavers.com
Mon Apr 6 08:21:48 CDT 2015


Some devices apparently return that the buffer contains an extra frame
that we never wrote. We should account for that to avoid an integer
underflow.
---

Another fix for Bug 38206.

 dlls/wineoss.drv/mmdevdrv.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c
index ccd5c86..d2a0c86 100644
--- a/dlls/wineoss.drv/mmdevdrv.c
+++ b/dlls/wineoss.drv/mmdevdrv.c
@@ -1412,6 +1412,12 @@ static void oss_write_data(ACImpl *This)
     }else
         in_oss_frames = (This->oss_bufsize_bytes - bi.bytes) / This->fmt->nBlockAlign;
 
+    if(in_oss_frames > This->in_oss_frames){
+        TRACE("Capping reported frames from %u to %u\n",
+                in_oss_frames, This->in_oss_frames);
+        in_oss_frames = This->in_oss_frames;
+    }
+
     write_limit = 0;
     while(write_limit + in_oss_frames < max_period * 3)
         write_limit += max_period;
-- 
2.3.5




More information about the wine-patches mailing list