Files
asterisk/res
Russell Bryant df4d47dff4 Fix crashes in ast_rtcp_write().
This patch addresses crashes related to RTCP handling.  The backtraces just
show a crash in ast_rtcp_write() where it appears that the RTP instance is no
longer valid.  There is a race condition with scheduled RTCP transmissions and
the destruction of the RTP instance.  This patch utilizes the fact that
ast_rtp_instance is a reference counted object and ensures that it will not get
destroyed while a reference is still around due to scheduled RTCP
transmissions.

RTCP transmissions are scheduled and executed from the chan_sip scheduler
context.  This scheduler context is processed in the SIP monitor thread.  The
destruction of an RTP instance occurs when the associated sip_pvt gets
destroyed (which happens when the sip_pvt reference count reaches 0).  However,
the SIP monitor thread is not the only thread that can cause a sip_pvt to get
destroyed.  The sip_hangup function, executed from a channel thread, also
decrements the reference count on a sip_pvt and could cause it to get
destroyed.

While this is being changed anyway, the patch also removes calling
ast_sched_del() from within the RTCP scheduler callback.  It's not helpful.
Simply returning 0 prevents the callback from being rescheduled.

(closes issue ASTERISK-18570)

Related issues that look like they are the same problem:

(issue ASTERISK-17560)
(issue ASTERISK-15406)
(issue ASTERISK-15257)
(issue ASTERISK-13334)
(issue ASTERISK-9977)
(issue ASTERISK-9716)

Review: https://reviewboard.asterisk.org/r/1444/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@336877 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2011-09-20 00:56:20 +00:00
..
2011-09-13 07:11:36 +00:00