From 1a052e0498ba1eec4eaef7bf07c007d0edec5478 Mon Sep 17 00:00:00 2001 From: Tilghman Lesher Date: Mon, 12 Nov 2007 17:29:17 +0000 Subject: [PATCH] Fix two cases of memory corruption caused by background threads. Reported by: atis Patch by: tilghman Fixes issue #10923 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@89184 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 8 ++++++++ main/channel.c | 2 ++ 2 files changed, 10 insertions(+) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 0b52a86771..8b9f96f749 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -2067,6 +2067,14 @@ static int __sip_autodestruct(const void *data) return 10000; /* Reschedule this destruction so that we know that it's gone */ } + /* If there are packets still waiting for delivery, delay the destruction */ + if (p->packets) { + if (option_debug > 2) + ast_log(LOG_DEBUG, "Re-scheduled destruction of SIP call %s\n", p->callid ? p->callid : ""); + append_history(p, "ReliableXmit", "timeout"); + return 10000; + } + /* If we're destroying a subscription, dereference peer object too */ if (p->subscribed == MWI_NOTIFICATION && p->relatedpeer) ASTOBJ_UNREF(p->relatedpeer,sip_destroy_peer); diff --git a/main/channel.c b/main/channel.c index 00e57117b0..c9de79bc07 100644 --- a/main/channel.c +++ b/main/channel.c @@ -1709,6 +1709,8 @@ int ast_hangup(struct ast_channel *chan) detach_spies(chan); /* get rid of spies */ + ast_autoservice_stop(chan); + if (chan->masq) { if (ast_do_masquerade(chan)) ast_log(LOG_WARNING, "Failed to perform masquerade\n");