Prevent sip_pvt refleak when an ast_channel outlasts its corresponding sip_pvt.
authorMark Michelson <mmichelson@digium.com>
Wed, 9 May 2012 16:36:10 +0000 (16:36 +0000)
committerMark Michelson <mmichelson@digium.com>
Wed, 9 May 2012 16:36:10 +0000 (16:36 +0000)
commit6125190ca125b10f7b829710be230816e9534f64
tree8a0e15688454c8d30c6742d48e0d5b8d2bf192dd
parentd71d8ed99525f982cb3eaf988f8e8d78fd5bf527
Prevent sip_pvt refleak when an ast_channel outlasts its corresponding sip_pvt.

chan_sip was coded under the assumption that a SIP dialog with an owner channel
will always be destroyed after the owner channel has been hung up.

However, there are situations where the SIP dialog can time out and auto destruct
before the corresponding channel has hung up. A typical example of this would be
if the 'h' extension in the dialplan takes a long time to complete. In such cases,
__sip_autodestruct() would complain about the dialog being auto destroyed with
an owner channel still in place. The problem is that even once the owner channel
was hung up, the sip_pvt would still be linked in its ao2_container because nothing
would ever unlink it.

The fix for this is that if __sip_autodestruct() is called for a sip_pvt that still
has an owner channel in place, the destruction is rescheduled for 10 seconds in the
future. This will continue until the owner channel is finally hung up.

(closes issue ASTERISK-19425)
reported by David Cunningham
Patches:
    ASTERISK-19425.patch uploaded by Mark Michelson (License #5049)

(closes issue ASTERISK-19455)
reported by Dean Vesvuio
Tested by Dean Vesvuio
........

Merged revisions 365896 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 365898 from http://svn.asterisk.org/svn/asterisk/branches/10

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@365913 65c4cc65-6c06-0410-ace0-fbb531ad65f3
channels/chan_sip.c