[pulseaudio-discuss] [PATCH 1/6] padsp: Fix flush
Tanu Kaskinen
tanuk at iki.fi
Fri Aug 19 15:02:58 UTC 2016
On Thu, 2016-08-18 at 18:17 +0200, Peter Meerwald-Stadler wrote:
> read() can return a number of bytes read less than k
There seem to be other fixes too, which are not mentioned in the commit
message: handling of EAGAIN (but not EINTR - looks like pa_read() would
be suitable here too), fix for the completely broken error handling
(errors didn't cause termination of the loop), and handling of EOF
(AFAIK not all fds have a concept of EOF, and not knowing what this
function is used on, I don't know if the EOF handling is necessary -
but it can't hurt either).
> 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..bb01f7f 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)
> + return 0;
Nitpicking: is there a reason why the errno == EAGAIN check uses
"break", but this returns zero directly? The end result is the same
anyway.
--
Tanu
More information about the pulseaudio-discuss
mailing list