From: Adam Miartus Date: Mon, 1 Jul 2019 13:25:18 +0000 (+0200) Subject: pcm_file: in case of failed write clear file buffer variables X-Git-Tag: v1.2.1~42 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=de1a9b2e81c1b0436ce790f6d6f894a6d2311055;p=alsa-lib.git pcm_file: in case of failed write clear file buffer variables 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 Reviewed-by: Timo Wischer Signed-off-by: Takashi Iwai --- diff --git a/src/pcm/pcm_file.c b/src/pcm/pcm_file.c index d83f97ae..03c16402 100644 --- a/src/pcm/pcm_file.c +++ b/src/pcm/pcm_file.c @@ -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; }