diff options
author | Tomohiro IKEDA <rilakkuma.san.xjapan@gmail.com> | 2022-06-19 07:05:17 +0900 |
---|---|---|
committer | Jaroslav Kysela <perex@perex.cz> | 2022-06-27 13:35:44 +0200 |
commit | b97047b4506994080982a587eb1249cd83a701d1 (patch) | |
tree | aa23caa98503f9717edbf2c7114b0324250b5f2e | |
parent | 917f4124840ab95324af9fdff05d787c1c677400 (diff) | |
download | alsa-lib-b97047b4506994080982a587eb1249cd83a701d1.tar.gz |
pcm: share plugin: return error if socket read or write call fails
Fixes: https://github.com/alsa-project/alsa-lib/pull/242
Signed-off-by: Tomohiro IKEDA <rilakkuma.san.xjapan@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
-rw-r--r-- | src/pcm/pcm_share.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/pcm/pcm_share.c b/src/pcm/pcm_share.c index 72509491..dc972dd8 100644 --- a/src/pcm/pcm_share.c +++ b/src/pcm/pcm_share.c @@ -205,6 +205,7 @@ static snd_pcm_uframes_t _snd_pcm_share_missing(snd_pcm_t *pcm) snd_pcm_sframes_t hw_avail; snd_pcm_uframes_t missing = INT_MAX; snd_pcm_sframes_t ready_missing; + ssize_t s; // printf("state=%s hw_ptr=%ld appl_ptr=%ld slave appl_ptr=%ld safety=%ld silence=%ld\n", snd_pcm_state_name(share->state), slave->hw_ptr, share->appl_ptr, *slave->pcm->appl_ptr, slave->safety_threshold, slave->silence_frames); switch (share->state) { case SND_PCM_STATE_RUNNING: @@ -290,15 +291,17 @@ static snd_pcm_uframes_t _snd_pcm_share_missing(snd_pcm_t *pcm) char buf[1]; if (pcm->stream == SND_PCM_STREAM_PLAYBACK) { if (ready) - read(share->slave_socket, buf, 1); + s = read(share->slave_socket, buf, 1); else - write(share->client_socket, buf, 1); + s = write(share->client_socket, buf, 1); } else { if (ready) - write(share->slave_socket, buf, 1); + s = write(share->slave_socket, buf, 1); else - read(share->client_socket, buf, 1); + s = read(share->client_socket, buf, 1); } + if (s == -1) + return INT_MAX; share->ready = ready; } if (!running) |