[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