]> git.alsa-project.org Git - alsa-lib.git/commitdiff
pcm_file: in case of failed write clear file buffer variables
authorAdam Miartus <amiartus@de.adit-jv.com>
Mon, 1 Jul 2019 13:25:18 +0000 (15:25 +0200)
committerTakashi Iwai <tiwai@suse.de>
Wed, 3 Jul 2019 12:23:03 +0000 (14:23 +0200)
previously, in case of failed write to output file, error is returned
from snd_pcm_writei/read APIs, user could run pcm_drain as fallback and
encounter an assert, since drain would try to write remaining file
buffer to a file

if failed to write to output file in first place, it makes sense to clear
current internal pmc_file file buffer variables

Signed-off-by: Adam Miartus <amiartus@de.adit-jv.com>
Reviewed-by: Timo Wischer <twischer@de.adit-jv.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
src/pcm/pcm_file.c

index d83f97aeeb5db895f01699c963079f99975a835c..03c16402bebab4568c0941c2c20069e422a85f27 100644 (file)
@@ -391,8 +391,11 @@ static int snd_pcm_file_write_bytes(snd_pcm_t *pcm, size_t bytes)
        if (file->format == SND_PCM_FILE_FORMAT_WAV &&
            !file->wav_header.fmt) {
                err = write_wav_header(pcm);
-               if (err < 0)
+               if (err < 0) {
+                       file->wbuf_used_bytes = 0;
+                       file->file_ptr_bytes = 0;
                        return err;
+               }
        }
 
        while (bytes > 0) {
@@ -403,6 +406,8 @@ static int snd_pcm_file_write_bytes(snd_pcm_t *pcm, size_t bytes)
                err = write(file->fd, file->wbuf + file->file_ptr_bytes, n);
                if (err < 0) {
                        err = -errno;
+                       file->wbuf_used_bytes = 0;
+                       file->file_ptr_bytes = 0;
                        SYSERR("%s write failed, file data may be corrupt", file->fname);
                        return err;
                }