Message ID | 1487315882-9160-1-git-send-email-sutar.mounesh@gmail.com |
---|---|
State | New |
Headers | show |
On Fri, 17 Feb 2017 08:18:02 +0100, sutar.mounesh@gmail.com wrote: > > From: Andreas Pape <apape@de.adit-jv.com> > > Passed config is freed after call to open, thus it is invalid when > trying to extract the converter name. So config entry is saved > for later usage. > > Signed-off-by: Andreas Pape <apape@de.adit-jv.com> > Signed-off-by: Mounesh Sutar <sutar.mounesh@gmail.com> > > diff --git a/src/pcm/pcm_plug.c b/src/pcm/pcm_plug.c > index 266707b..6d0c03d 100644 > --- a/src/pcm/pcm_plug.c > +++ b/src/pcm/pcm_plug.c > @@ -64,6 +64,8 @@ static int snd_pcm_plug_close(snd_pcm_t *pcm) > snd_pcm_plug_t *plug = pcm->private_data; > int err, result = 0; > free(plug->ttable); > + if (plug->rate_converter) > + snd_config_delete((snd_config_t*)plug->rate_converter); > assert(plug->gen.slave == plug->req_slave); > if (plug->gen.close_slave) { > snd_pcm_unlink_hw_ptr(pcm, plug->req_slave); > @@ -1108,7 +1110,15 @@ int snd_pcm_plug_open(snd_pcm_t **pcmp, > plug->sformat = sformat; > plug->schannels = schannels; > plug->srate = srate; > - plug->rate_converter = rate_converter; > + if (rate_converter) { > + if ((err = snd_config_copy((snd_config_t**)&plug->rate_converter, > + (snd_config_t *)rate_converter)) < 0) > + free(plug); > + return err; > + } > + else > + snd_config_delete((snd_config_t*)plug->rate_converter); Why do we need to delete plug->rate_converter here...? It's nowhere assigned after the patch? thanks, Takashi
Hi Takashi, Yes, it is redundant to delete plug->rate_converter. The patch has been fixed and submitted. Regards, Mounesh -----Original Message----- From: Takashi Iwai [mailto:tiwai@suse.de] Sent: 17 February 2017 23:15 To: sutar.mounesh@gmail.com Cc: alsa-devel@alsa-project.org; Sutar, Mounesh <Mounesh_Sutar@mentor.com>; Andreas Pape <apape@de.adit-jv.com> Subject: Re: [PATCH 6/6] pcm:plug: save converter config On Fri, 17 Feb 2017 08:18:02 +0100, sutar.mounesh@gmail.com wrote: > > From: Andreas Pape <apape@de.adit-jv.com> > > Passed config is freed after call to open, thus it is invalid when > trying to extract the converter name. So config entry is saved for > later usage. > > Signed-off-by: Andreas Pape <apape@de.adit-jv.com> > Signed-off-by: Mounesh Sutar <sutar.mounesh@gmail.com> > > diff --git a/src/pcm/pcm_plug.c b/src/pcm/pcm_plug.c index > 266707b..6d0c03d 100644 > --- a/src/pcm/pcm_plug.c > +++ b/src/pcm/pcm_plug.c > @@ -64,6 +64,8 @@ static int snd_pcm_plug_close(snd_pcm_t *pcm) > snd_pcm_plug_t *plug = pcm->private_data; > int err, result = 0; > free(plug->ttable); > + if (plug->rate_converter) > + snd_config_delete((snd_config_t*)plug->rate_converter); > assert(plug->gen.slave == plug->req_slave); > if (plug->gen.close_slave) { > snd_pcm_unlink_hw_ptr(pcm, plug->req_slave); @@ -1108,7 +1110,15 @@ > int snd_pcm_plug_open(snd_pcm_t **pcmp, > plug->sformat = sformat; > plug->schannels = schannels; > plug->srate = srate; > - plug->rate_converter = rate_converter; > + if (rate_converter) { > + if ((err = snd_config_copy((snd_config_t**)&plug->rate_converter, > + (snd_config_t *)rate_converter)) < 0) > + free(plug); > + return err; > + } > + else > + snd_config_delete((snd_config_t*)plug->rate_converter); Why do we need to delete plug->rate_converter here...? It's nowhere assigned after the patch? thanks, Takashi
diff --git a/src/pcm/pcm_plug.c b/src/pcm/pcm_plug.c index 266707b..6d0c03d 100644 --- a/src/pcm/pcm_plug.c +++ b/src/pcm/pcm_plug.c @@ -64,6 +64,8 @@ static int snd_pcm_plug_close(snd_pcm_t *pcm) snd_pcm_plug_t *plug = pcm->private_data; int err, result = 0; free(plug->ttable); + if (plug->rate_converter) + snd_config_delete((snd_config_t*)plug->rate_converter); assert(plug->gen.slave == plug->req_slave); if (plug->gen.close_slave) { snd_pcm_unlink_hw_ptr(pcm, plug->req_slave); @@ -1108,7 +1110,15 @@ int snd_pcm_plug_open(snd_pcm_t **pcmp, plug->sformat = sformat; plug->schannels = schannels; plug->srate = srate; - plug->rate_converter = rate_converter; + if (rate_converter) { + if ((err = snd_config_copy((snd_config_t**)&plug->rate_converter, + (snd_config_t *)rate_converter)) < 0) + free(plug); + return err; + } + else + snd_config_delete((snd_config_t*)plug->rate_converter); + plug->gen.slave = plug->req_slave = slave; plug->gen.close_slave = close_slave; plug->route_policy = route_policy; @@ -1119,6 +1129,8 @@ int snd_pcm_plug_open(snd_pcm_t **pcmp, err = snd_pcm_new(&pcm, SND_PCM_TYPE_PLUG, name, slave->stream, slave->mode); if (err < 0) { + if (plug->rate_converter) + snd_config_delete((snd_config_t*)plug->rate_converter); free(plug); return err; }