]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
fixes crash in check_rtp_timeout
authorDavid Vossel <dvossel@digium.com>
Wed, 19 May 2010 19:21:04 +0000 (19:21 +0000)
committerDavid Vossel <dvossel@digium.com>
Wed, 19 May 2010 19:21:04 +0000 (19:21 +0000)
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/trunk@264331 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 9bb79167ad487a7643aaefdc49a4267e2ec4ff9b..689ed477b75a3b187b16b813d8d5d67a905e7526 100644 (file)
@@ -23461,6 +23461,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 */