mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-11-04 13:30:08 -05:00
pcm_file: fix pipe stall when pclose() is called too early
BugLink: https://github.com/alsa-project/alsa-lib/issues/14 Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
4a480362eb
commit
193ed64fd9
1 changed files with 7 additions and 9 deletions
|
|
@ -71,6 +71,7 @@ typedef struct {
|
|||
int trunc;
|
||||
int perm;
|
||||
int fd;
|
||||
FILE *pipe;
|
||||
char *ifname;
|
||||
int ifd;
|
||||
int format;
|
||||
|
|
@ -227,15 +228,10 @@ static int snd_pcm_file_open_output_file(snd_pcm_file_t *file)
|
|||
file->final_fname);
|
||||
return -errno;
|
||||
}
|
||||
fd = dup(fileno(pipe));
|
||||
err = -errno;
|
||||
pclose(pipe);
|
||||
if (fd < 0) {
|
||||
SYSERR("unable to dup pipe file handle for command %s",
|
||||
file->final_fname);
|
||||
return err;
|
||||
}
|
||||
fd = fileno(pipe);
|
||||
file->pipe = pipe;
|
||||
} else {
|
||||
file->pipe = NULL;
|
||||
if (file->trunc)
|
||||
fd = open(file->final_fname, O_WRONLY|O_CREAT|O_TRUNC,
|
||||
file->perm);
|
||||
|
|
@ -486,7 +482,9 @@ static int snd_pcm_file_close(snd_pcm_t *pcm)
|
|||
if (file->wav_header.fmt)
|
||||
fixup_wav_header(pcm);
|
||||
free((void *)file->fname);
|
||||
if (file->fd >= 0) {
|
||||
if (file->pipe) {
|
||||
pclose(file->pipe);
|
||||
} else if (file->fd >= 0) {
|
||||
close(file->fd);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue