[alsa-devel] memory leak in mix/pcm_upmix.c mix/pcm_downmix.c!!!

boozer asm asmboozer at gmail.com
Wed Aug 30 10:28:35 CEST 2017


not sure what's the best place to call free.
1.
static int snd_pcm_extplug_close(snd_pcm_t *pcm)
{
    extplug_priv_t *ext = pcm->private_data;

    snd_pcm_close(ext->plug.gen.slave);
    clear_ext_params(ext);
    if (ext->data->callback->close)
    {
        ext->data->callback->close(ext->data);
    }
    if (ext->data)
         free(ext->data);
    free(ext);
    return 0;
}

2.
366 static int upmix_close(snd_pcm_extplug_t *ext)
367 {
368     snd_pcm_upmix_t *mix = (snd_pcm_upmix_t *)ext;
369     free(mix->delayline[0]);
370     free(mix->delayline[1]);
          free(mix);
371     return 0;
372 }

3. apply method in alsa-plugins/maemo/alsa-dsp.c:748:static void
alsa_dsp_descructor(void) __attribute__ ((destructor));

with each methods, there are some plugins pcm_ files affected.


2017-08-30 16:17 GMT+08:00 Takashi Iwai <tiwai at suse.de>:

> On Wed, 30 Aug 2017 09:59:59 +0200,
> boozer asm wrote:
> >
> > Hi  Takashi,
> >
> > i think mix is same as ext->data instead ext. ext is of extplug_priv_t *;
> > so it is definitely not mix which is of snd_pcm_upmix_t
> >
> >  33 struct snd_pcm_upmix {
> >  34     snd_pcm_extplug_t ext;
> >
> > typedef struct snd_pcm_extplug_priv {
> >     snd_pcm_plugin_t plug;
> >     snd_pcm_extplug_t *data;
> > between upmix and extplug_priv, there is a gap plug, which forbid ext to
> be
> > converted to mix directly.
> > so free(ext) in snd_pcm_extplug_close does NOT promise it will free mix
> too.
>
> OK, then care to submit patches?
>
>
> thanks,
>
> Takashi
>


More information about the Alsa-devel mailing list