diff options
author | Mark Farrugia <mark.farrugia@fiberdyne.com.au> | 2018-11-20 18:23:46 +1100 |
---|---|---|
committer | Mark Farrugia <mark.farrugia@fiberdyne.com.au> | 2018-11-20 18:24:49 +1100 |
commit | af54a3dd7c7581a3039838591aec14720e854684 (patch) | |
tree | d5025ababebf77f2cabf7804b5e5675dcc24b83e /pcm.c | |
parent | 4ff37d576bc43e4655e5ed02bc8016e266c9893d (diff) |
Fix missing 'close' PCM callback
We need to have to close PCM callback set, otherwise we get
a kernel crash when the PCM middle layer attempts to dereference
a NULL pointer.
Signed-off-by: Mark Farrugia <mark.farrugia@fiberdyne.com.au>
Diffstat (limited to 'pcm.c')
-rw-r--r-- | pcm.c | 17 |
1 files changed, 17 insertions, 0 deletions
@@ -92,6 +92,22 @@ static int pcm_open(struct snd_pcm_substream *substream) } /** + * pcm_close - Implements 'close' callback for PCM middle layer + * @substream: pointer to ALSA PCM substream + * + * This is called when a PCM substream is closed. + * + * Returns 0 on success or error code otherwise. + */ +static int pcm_close(struct snd_pcm_substream *substream) +{ + // Do additional Audio Path 'close' callback + return DO_AUDIOPATH_CB( + (struct snd_avirt_audiopath *)PRIVATE_DATA(substream)->audiopath, + close, substream); +} + +/** * pcm_hw_params - Implements 'hw_params' callback for PCM middle layer * @substream: pointer to ALSA PCM substream * @hw_params: contains the hardware parameters for the PCM @@ -154,6 +170,7 @@ static int pcm_hw_free(struct snd_pcm_substream *substream) */ struct snd_pcm_ops pcm_ops_avirt = { .open = pcm_open, + .close = pcm_close, .ioctl = snd_pcm_lib_ioctl, .hw_params = pcm_hw_params, .hw_free = pcm_hw_free, |