]> git.alsa-project.org Git - alsa-utils.git/commitdiff
aplay: pcm_read(): return read samples instead of requested upon abort
authorMarcin Rajwa <marcin.rajwa@linux.intel.com>
Fri, 7 Aug 2020 15:35:44 +0000 (17:35 +0200)
committerJaroslav Kysela <perex@perex.cz>
Tue, 6 Oct 2020 10:58:20 +0000 (12:58 +0200)
This patch changes the logic of pcm_read() when abort signal has been
detected. During such condition we should return the amount of frames
actually read instead of the size requested by caller.

Currently functions pcm_read() and pcm_readv() when aborted (in_aborting
flag set) return the amount of requested frames instead of those actually
read prior to interrupt. The consequence of this is repetition of recent X
frames where X stands for amount of frames in one period. This problem is
barely visible or rather audible when the period is small like few
milliseconds because repetition of 1 [ms] of data is not-noticeable
however if we use buffer and period sizes in seconds then the problem
becomes apparent.

Signed-off-by: Marcin Rajwa <marcin.rajwa@linux.intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
aplay/aplay.c

index 6e7f4ae0e186a5b2e9db0419d3ff1daf6872049e..d71035c3a0591e91ddef00d28ac775bbe0810803 100644 (file)
@@ -2135,7 +2135,9 @@ static ssize_t pcm_read(u_char *data, size_t rcount)
                count = chunk_size;
        }
 
-       while (count > 0 && !in_aborting) {
+       while (count > 0) {
+               if (in_aborting)
+                       goto abort;
                if (test_position)
                        do_test_position();
                check_stdin();
@@ -2161,6 +2163,7 @@ static ssize_t pcm_read(u_char *data, size_t rcount)
                        data += r * bits_per_frame / 8;
                }
        }
+abort:
        return rcount;
 }