]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 264331 via svnmerge from
authorDavid Vossel <dvossel@digium.com>
Wed, 19 May 2010 19:25:20 +0000 (19:25 +0000)
committerDavid Vossel <dvossel@digium.com>
Wed, 19 May 2010 19:25:20 +0000 (19:25 +0000)
https://origsvn.digium.com/svn/asterisk/trunk

........
  r264331 | dvossel | 2010-05-19 14:21:04 -0500 (Wed, 19 May 2010) | 13 lines

  fixes crash in check_rtp_timeout

  During deadlock avoidance the sip dialog pvt is locked and
  unlocked.  When this occurs we have no guarantee the pvt's owner
  is still valid.  We were trying to access the pvt's owner after
  this without checking to see if it still existed first.

  (closes issue #17271)
  Reported by: under
  Patches:
        check_rtp_timeout.diff uploaded by under (license 914)
  Tested by: dvossel
........

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.2@264332 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 5b6f159f0af5057910c169c0f7f31f0cad518a97..eec004aab9555fe810965b7e076481f3d8dd09d7 100644 (file)
@@ -22475,6 +22475,9 @@ static void check_rtp_timeout(struct sip_pvt *dialog, time_t t)
                                        usleep(1);
                                        sip_pvt_lock(dialog);
                                }
+                               if (!dialog->owner) {
+                                       return; /* channel hangup can occur during deadlock avoidance. */
+                               }
                                ast_log(LOG_NOTICE, "Disconnecting call '%s' for lack of RTP activity in %ld seconds\n",
                                        dialog->owner->name, (long) (t - dialog->lastrtprx));
                                /* Issue a softhangup */