From c99efbffd694ff2d2088339e8412972d90e7cd95 Mon Sep 17 00:00:00 2001 From: Peter Meerwald-Stadler Date: Wed, 17 Aug 2016 23:52:17 +0200 Subject: [PATCH] padsp: Fix flush and improve error handling 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 943479b39..7a94114f0 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;