]> git.alsa-project.org Git - alsa-lib.git/commitdiff
pcm: share plugin: return error if socket read or write call fails
authorTomohiro IKEDA <rilakkuma.san.xjapan@gmail.com>
Sat, 18 Jun 2022 22:05:17 +0000 (07:05 +0900)
committerJaroslav Kysela <perex@perex.cz>
Mon, 27 Jun 2022 11:35:44 +0000 (13:35 +0200)
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>
src/pcm/pcm_share.c

index 72509491b36647eac9e290dfb22b06f6cb7c0ca3..dc972dd82813402f71cb7a43d9b8669a987b8e4c 100644 (file)
@@ -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)