[asterisk-commits] tilghman: branch 1.6.0 r133524 - in /branches/1.6.0: ./ channels/chan_sip.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Jul 24 16:31:30 CDT 2008


Author: tilghman
Date: Thu Jul 24 16:31:29 2008
New Revision: 133524

URL: http://svn.digium.com/view/asterisk?view=rev&rev=133524
Log:
Merged revisions 133509 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/trunk

................
r133509 | tilghman | 2008-07-24 16:27:06 -0500 (Thu, 24 Jul 2008) | 11 lines

Merged revisions 133488 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r133488 | tilghman | 2008-07-24 16:17:55 -0500 (Thu, 24 Jul 2008) | 3 lines

Fix rtautoclear and rtcachefriends
(Closes issue #12707)

........

................

Modified:
    branches/1.6.0/   (props changed)
    branches/1.6.0/channels/chan_sip.c

Propchange: branches/1.6.0/
------------------------------------------------------------------------------
Binary property 'trunk-merged' - no diff available.

Modified: branches/1.6.0/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/branches/1.6.0/channels/chan_sip.c?view=diff&rev=133524&r1=133523&r2=133524
==============================================================================
--- branches/1.6.0/channels/chan_sip.c (original)
+++ branches/1.6.0/channels/chan_sip.c Thu Jul 24 16:31:29 2008
@@ -3750,9 +3750,8 @@
 			AST_SCHED_REPLACE(peer->expire, sched, global_rtautoclear * 1000, expire_register, (void *) peer);
 		}
 		ASTOBJ_CONTAINER_LINK(&peerl, peer);
-	} else {
-		peer->is_realtime = 1;
-	}
+	}
+	peer->is_realtime = 1;
 	if (peerlist)
 		ast_config_destroy(peerlist);
 	else {
@@ -9914,7 +9913,7 @@
 		expiry = max_expiry;
 	if (expiry < min_expiry)
 		expiry = min_expiry;
-	peer->expire = peer->is_realtime ? -1 :
+	peer->expire = peer->is_realtime && !ast_test_flag(&peer->flags[1], SIP_PAGE2_RTCACHEFRIENDS) ? -1 :
 		ast_sched_add(sched, (expiry + 10) * 1000, expire_register, peer);
 	pvt->expiry = expiry;
 	snprintf(data, sizeof(data), "%s:%d:%d:%s:%s", ast_inet_ntoa(peer->addr.sin_addr), ntohs(peer->addr.sin_port), expiry, peer->username, peer->fullcontact);
@@ -19413,7 +19412,14 @@
 
 	ast_debug(3, "Checking device state for peer %s\n", host);
 
-	if ((p = find_peer(host, NULL, 1))) {
+	/* If find_peer asks for a realtime peer, then this breaks rtautoclear.  This
+	 * is because when a peer tries to autoexpire, the last thing it does is to
+	 * queue up an event telling the system that the devicestate has changed
+	 * (presumably to unavailable).  If we ask for a realtime peer here, this would
+	 * load it BACK into memory, thus defeating the point of trying to clear dead
+	 * hosts out of memory.
+	 */
+	if ((p = find_peer(host, NULL, 0))) {
 		if (p->addr.sin_addr.s_addr || p->defaddr.sin_addr.s_addr) {
 			/* we have an address for the peer */
 		




More information about the asterisk-commits mailing list