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@xxxxxxx>: > 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 > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel