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 <amiartus@de.adit-jv.com>
Reviewed-by: Timo Wischer <twischer@de.adit-jv.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Adam Miartus 2019-07-01 15:25:18 +02:00 committed by Takashi Iwai
parent 61b0f8f3f2
commit de1a9b2e81

View 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 && if (file->format == SND_PCM_FILE_FORMAT_WAV &&
!file->wav_header.fmt) { !file->wav_header.fmt) {
err = write_wav_header(pcm); err = write_wav_header(pcm);
if (err < 0) if (err < 0) {
file->wbuf_used_bytes = 0;
file->file_ptr_bytes = 0;
return err; return err;
}
} }
while (bytes > 0) { 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); err = write(file->fd, file->wbuf + file->file_ptr_bytes, n);
if (err < 0) { if (err < 0) {
err = -errno; err = -errno;
file->wbuf_used_bytes = 0;
file->file_ptr_bytes = 0;
SYSERR("%s write failed, file data may be corrupt", file->fname); SYSERR("%s write failed, file data may be corrupt", file->fname);
return err; return err;
} }