When pulse_hw_constraint returns error, snd_pcm_ioplug_delete() is called.
It will then call pulse_close() where "snd_pcm_pulse_t *pcm" will be free.
Then if goto the "error" label, the "snd_pcm_pulse_t *pcm" will be double-free.
To prevent this, just jump over the code which might cause double-free.
Signed-off-by: Kui Wang <wangkuisuper@hotmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
err = pulse_hw_constraint(pcm);
if (err < 0) {
snd_pcm_ioplug_delete(&pcm->io);
- goto error;
+ goto error2;
}
*pcmp = pcm->io.pcm;
free(pcm->device);
free(pcm);
+error2:
if (fallback_name)
return snd_pcm_open_fallback(pcmp, root, fallback_name, name,
stream, mode);