summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaroslav Kysela <perex@perex.cz>2022-06-27 13:36:12 +0200
committerJaroslav Kysela <perex@perex.cz>2022-06-27 13:36:36 +0200
commit65c4796a8567a7eb5234972220af6b390d924161 (patch)
tree61e7874c09ae95ae2123505968348d5e43964f48
parentb97047b4506994080982a587eb1249cd83a701d1 (diff)
downloadalsa-lib-65c4796a8567a7eb5234972220af6b390d924161.tar.gz
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 <perex@perex.cz>
-rw-r--r--src/pcm/pcm_share.c30
1 files 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)