Merged revisions 336878 via svnmerge from
authorRussell Bryant <russell@russellbryant.com>
Tue, 20 Sep 2011 01:11:18 +0000 (01:11 +0000)
committerRussell Bryant <russell@russellbryant.com>
Tue, 20 Sep 2011 01:11:18 +0000 (01:11 +0000)
commit14d3f891e0cd8985ce7305dff62d134edfabd02f
treeb729442d903e535e20a73a7212ca93e2bb964878
parent098efb66412cd1a262c8a95427948008113cd43e
Merged revisions 336878 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/10

................
  r336878 | russell | 2011-09-19 20:03:55 -0500 (Mon, 19 Sep 2011) | 43 lines

  Merged revisions 336877 via svnmerge from
  https://origsvn.digium.com/svn/asterisk/branches/1.8

  ........
    r336877 | russell | 2011-09-19 19:56:20 -0500 (Mon, 19 Sep 2011) | 36 lines

    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/trunk@336879 65c4cc65-6c06-0410-ace0-fbb531ad65f3
res/res_rtp_asterisk.c