From: Jaroslav Kysela Date: Mon, 27 Jun 2022 11:36:12 +0000 (+0200) Subject: pcm: share plugin: handle -EINTR X-Git-Tag: v1.2.7.2~4 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=65c4796a8567a7eb5234972220af6b390d924161;p=alsa-lib.git 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 --- 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)