aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-02-06 18:11:13 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-02-06 18:11:13 +0000
commit687781a1f8453c67ea49717fcbbbfd7d46401142 (patch)
treec5c32e435000d2cd56796c08647746b2638f74ae
parentc482188fb81fe9224dcfa08df7f07d89ca4cde4c (diff)
Don't free private structure until iax2_hangup is actually called
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@2136 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-xchannels/chan_iax2.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index 8ffd12037..e24f618be 100755
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -1038,9 +1038,11 @@ retry:
goto retry;
}
}
- iaxs[callno] = NULL;
+ if (!owner)
+ iaxs[callno] = NULL;
if (pvt) {
- pvt->owner = NULL;
+ if (!owner)
+ pvt->owner = NULL;
/* No more pings or lagrq's */
if (pvt->pingid > -1)
ast_sched_del(sched, pvt->pingid);
@@ -1063,7 +1065,6 @@ retry:
if (owner) {
/* If there's an owner, prod it to give up */
- owner->pvt->pvt = NULL;
owner->_softhangup |= AST_SOFTHANGUP_DEV;
ast_queue_hangup(owner, 0);
}
@@ -1076,7 +1077,8 @@ retry:
if (pvt->reg) {
pvt->reg->callno = 0;
}
- free(pvt);
+ if (!owner)
+ free(pvt);
}
if (owner) {
ast_mutex_unlock(&owner->lock);