]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
automerge commit
authorAutomerge script <automerge@asterisk.org>
Mon, 31 Jul 2006 22:03:05 +0000 (22:03 +0000)
committerAutomerge script <automerge@asterisk.org>
Mon, 31 Jul 2006 22:03:05 +0000 (22:03 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@38631 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 49a5cb0775dd9cf253cae578c82df19750792bd8..53ba0086a2f3b700c8d57eacb887d9b5239d6c1d 100644 (file)
@@ -11549,7 +11549,11 @@ static void *do_monitor(void *data)
 restartsearch:         
                time(&t);
                sip = iflist;
-               while(sip) {
+               /* don't scan the interface list if it hasn't been a reasonable period
+                  of time since the last time we did it (when MWI is being sent, we can
+                  get back to this point every millisecond or less)
+               */
+               while(!fastrestart && sip) {
                        ast_mutex_lock(&sip->lock);
                        if (sip->rtp && sip->owner && (sip->owner->_state == AST_STATE_UP) && !sip->redirip.sin_addr.s_addr) {
                                if (sip->lastrtptx && sip->rtpkeepalive && t > sip->lastrtptx + sip->rtpkeepalive) {
@@ -11574,8 +11578,14 @@ restartsearch:
                                                        if (sip->owner) {
                                                                ast_log(LOG_NOTICE, "Disconnecting call '%s' for lack of RTP activity in %ld seconds\n", sip->owner->name, (long)(t - sip->lastrtprx));
                                                                /* Issue a softhangup */
-                                                               ast_softhangup(sip->owner, AST_SOFTHANGUP_DEV);
+                                                               ast_softhangup_nolock(sip->owner, AST_SOFTHANGUP_DEV);
                                                                ast_mutex_unlock(&sip->owner->lock);
+                                                               /* forget the timeouts for this call, since a hangup
+                                                                  has already been requested and we don't want to
+                                                                  repeatedly request hangups
+                                                               */
+                                                               sip->rtptimeout = 0;
+                                                               sip->rtpholdtimeout = 0;
                                                        }
                                                }
                                        }