From 65c4796a8567a7eb5234972220af6b390d924161 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 27 Jun 2022 13:36:12 +0200 Subject: pcm: share plugin: handle -EINTR Fixes: https://github.com/alsa-project/alsa-lib/pull/242 Fixes: b97047b4 ("pcm: share plugin: return error if socket read or write call fails") Signed-off-by: Jaroslav Kysela --- src/pcm/pcm_share.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/pcm/pcm_share.c b/src/pcm/pcm_share.c index dc972dd8..ac088472 100644 --- a/src/pcm/pcm_share.c +++ b/src/pcm/pcm_share.c @@ -289,19 +289,25 @@ static snd_pcm_uframes_t _snd_pcm_share_missing(snd_pcm_t *pcm) update_poll: if (ready != share->ready) { char buf[1]; - if (pcm->stream == SND_PCM_STREAM_PLAYBACK) { - if (ready) - s = read(share->slave_socket, buf, 1); - else - s = write(share->client_socket, buf, 1); - } else { - if (ready) - s = write(share->slave_socket, buf, 1); - else - s = read(share->client_socket, buf, 1); + while (1) { + if (pcm->stream == SND_PCM_STREAM_PLAYBACK) { + if (ready) + s = read(share->slave_socket, buf, 1); + else + s = write(share->client_socket, buf, 1); + } else { + if (ready) + s = write(share->slave_socket, buf, 1); + else + s = read(share->client_socket, buf, 1); + } + if (s < 0) { + if (errno == EINTR) + continue; + return INT_MAX; + } + break; } - if (s == -1) - return INT_MAX; share->ready = ready; } if (!running) -- cgit v1.2.1