ALSA: pcm: Fix double hw_free calls
The commit66f2d19f81
("ALSA: pcm: Fix memory leak at closing a stream without hw_free") tried to fix the regression wrt the missing hw_free call at closing without SNDRV_PCM_IOCTL_HW_FREE ioctl. However, the code change dropped mistakenly the state check, resulting in calling hw_free twice when SNDRV_PCM_IOCTL_HW_FRE got called beforehand. For most drivers, this is almost harmless, but the drivers like SOF show another regression now. This patch adds the state condition check before calling do_hw_free() at releasing the stream for avoiding the double hw_free calls. Fixes:66f2d19f81
("ALSA: pcm: Fix memory leak at closing a stream without hw_free") Reported-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reported-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Tested-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Cc: <stable@vger.kernel.org> Link: https://lore.kernel.org/r/s5hd0ajyprg.wl-tiwai@suse.de Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
9f35a31283
commit
0fbb027b44
|
@ -2594,7 +2594,8 @@ void snd_pcm_release_substream(struct snd_pcm_substream *substream)
|
||||||
|
|
||||||
snd_pcm_drop(substream);
|
snd_pcm_drop(substream);
|
||||||
if (substream->hw_opened) {
|
if (substream->hw_opened) {
|
||||||
do_hw_free(substream);
|
if (substream->runtime->status->state != SNDRV_PCM_STATE_OPEN)
|
||||||
|
do_hw_free(substream);
|
||||||
substream->ops->close(substream);
|
substream->ops->close(substream);
|
||||||
substream->hw_opened = 0;
|
substream->hw_opened = 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue