[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