diff options
author | Richard Mudgett <rmudgett@digium.com> | 2009-09-08 23:37:57 +0000 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2009-09-08 23:37:57 +0000 |
commit | fd561e871f70d3c28cbc8f4ef08c4ae0221932d0 (patch) | |
tree | 42dc130bc7005d8507587595f03339692d2f0ca3 /channels/chan_dahdi.c | |
parent | 856202947631c9be750a08aa6d18605965df7fd9 (diff) |
Fix memory leak of sig_xxx private structures.
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@217332 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/chan_dahdi.c')
-rw-r--r-- | channels/chan_dahdi.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c index 44a170be4..ea8e113e3 100644 --- a/channels/chan_dahdi.c +++ b/channels/chan_dahdi.c @@ -4683,6 +4683,16 @@ static void destroy_dahdi_pvt(struct dahdi_pvt **pvt) p->prev->next = p->next; if (p->next) p->next->prev = p->prev; + if (p->sig_pvt) { + if (analog_lib_handles(p->sig, 0, 0)) { + analog_delete(p->sig_pvt); + } +#if defined(HAVE_PRI) + if (dahdi_sig_pri_lib_handles(p->sig)) { + sig_pri_chan_delete(p->sig_pvt); + } +#endif /* defined(HAVE_PRI) */ + } if (p->use_smdi) ast_smdi_interface_unref(p->smdi_iface); if (p->mwi_event_sub) @@ -10693,6 +10703,7 @@ static struct dahdi_pvt *mkintf(int channel, const struct dahdi_chan_conf *conf, } else { chan_sig = 0; } + tmp->sig = chan_sig; if (analog_lib_handles(chan_sig, tmp->radio, tmp->oprmode)) { analog_p = analog_new(dahdisig_to_analogsig(chan_sig), &dahdi_analog_callbacks, tmp); @@ -11032,7 +11043,6 @@ static struct dahdi_pvt *mkintf(int channel, const struct dahdi_chan_conf *conf, tmp->mwimonitor_neon = conf->chan.mwimonitor_neon; tmp->mwimonitor_rpas = conf->chan.mwimonitor_rpas; } - tmp->sig = chan_sig; tmp->outsigmod = conf->chan.outsigmod; tmp->ringt_base = ringt_base; tmp->firstradio = 0; |