[pulseaudio-discuss] [PATCH v2 1/6] padsp: Fix flush and improve error handling

Peter Meerwald-Stadler pmeerw at pmeerw.net
Tue Aug 30 13:04:30 UTC 2016


read() can return a number of bytes read less than k

in addition, handle EAGAIN and EOF

CID 1137981
---
 src/utils/padsp.c |   11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/utils/padsp.c b/src/utils/padsp.c
index 943479b..7a94114 100644
--- a/src/utils/padsp.c
+++ b/src/utils/padsp.c
@@ -1768,11 +1768,18 @@ static int dsp_flush_fd(int fd) {
     while (l > 0) {
         char buf[1024];
         size_t k;
+        ssize_t r;
 
         k = (size_t) l > sizeof(buf) ? sizeof(buf) : (size_t) l;
-        if (read(fd, buf, k) < 0)
+        r = read(fd, buf, k);
+        if (r < 0) {
+            if (errno == EAGAIN)
+                break;
             debug(DEBUG_LEVEL_NORMAL, __FILE__": read(): %s\n", strerror(errno));
-        l -= k;
+            return -1;
+        } else if (r == 0)
+            break;
+        l -= r;
     }
 
     return 0;
-- 
1.7.10.4



More information about the pulseaudio-discuss mailing list