aboutsummaryrefslogtreecommitdiffstats
path: root/channels/chan_dahdi.c
diff options
context:
space:
mode:
authorrmudgett <rmudgett@f38db490-d61c-443f-a65b-d21fe96a405b>2009-09-08 23:37:57 +0000
committerrmudgett <rmudgett@f38db490-d61c-443f-a65b-d21fe96a405b>2009-09-08 23:37:57 +0000
commit7ca87fcab5a5e9b78b34afcbb8d36d7469a55d2f (patch)
tree42dc130bc7005d8507587595f03339692d2f0ca3 /channels/chan_dahdi.c
parent2c3011915a9bd083d08213f8fb773e81436226eb (diff)
Fix memory leak of sig_xxx private structures.
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@217332 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_dahdi.c')
-rw-r--r--channels/chan_dahdi.c12
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;