summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
authorRussell Bryant <russell@russellbryant.com>2011-04-25 19:06:08 +0000
committerRussell Bryant <russell@russellbryant.com>2011-04-25 19:06:08 +0000
commit1c14c67ce8d4cd7ae3056560c832f6c3efc84365 (patch)
tree81506f1803545855072cb2ea864ca075d97c3a91 /channels
parent472e9aca3fd7c7320e355d9981ffe231e446af0f (diff)
Merged revisions 315213 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8 ................ r315213 | russell | 2011-04-25 14:04:28 -0500 (Mon, 25 Apr 2011) | 14 lines Merged revisions 315212 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.6.2 ........ r315212 | russell | 2011-04-25 14:00:24 -0500 (Mon, 25 Apr 2011) | 7 lines Don't link non-cached realtime peers into the peers_by_ip container. (closes issue #18924) Reported by: wdoekes Patches: issue18924_uncached_realtime_peers_leak-1.6.2.17.patch uploaded by wdoekes (license 717) ........ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@315214 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_sip.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 2938fc879..81cdce284 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -13609,7 +13609,7 @@ static enum parse_register_result parse_register_contact(struct sip_pvt *pvt, st
oldsin = peer->addr;
/* If we were already linked into the peers_by_ip container unlink ourselves so nobody can find us */
- if (!ast_sockaddr_isnull(&peer->addr)) {
+ if (!ast_sockaddr_isnull(&peer->addr) && (!peer->is_realtime || ast_test_flag(&global_flags[1], SIP_PAGE2_RTCACHEFRIENDS))) {
ao2_t_unlink(peers_by_ip, peer, "ao2_unlink of peer from peers_by_ip table");
}
@@ -13662,7 +13662,9 @@ static enum parse_register_result parse_register_contact(struct sip_pvt *pvt, st
}
/* Now that our address has been updated put ourselves back into the container for lookups */
- ao2_t_link(peers_by_ip, peer, "ao2_link into peers_by_ip table");
+ if (!peer->is_realtime || ast_test_flag(&peer->flags[1], SIP_PAGE2_RTCACHEFRIENDS)) {
+ ao2_t_link(peers_by_ip, peer, "ao2_link into peers_by_ip table");
+ }
/* Save SIP options profile */
peer->sipoptions = pvt->sipoptions;
@@ -16394,6 +16396,8 @@ static char *sip_show_objects(struct ast_cli_entry *e, int cmd, struct ast_cli_a
return CLI_SHOWUSAGE;
ast_cli(a->fd, "-= Peer objects: %d static, %d realtime, %d autocreate =-\n\n", speerobjs, rpeerobjs, apeerobjs);
ao2_t_callback(peers, OBJ_NODATA, peer_dump_func, a, "initiate ao2_callback to dump peers");
+ ast_cli(a->fd, "-= Peer objects by IP =-\n\n");
+ ao2_t_callback(peers_by_ip, OBJ_NODATA, peer_dump_func, a, "initiate ao2_callback to dump peers_by_ip");
ast_cli(a->fd, "-= Registry objects: %d =-\n\n", regobjs);
ASTOBJ_CONTAINER_DUMP(a->fd, tmp, sizeof(tmp), &regl);
ast_cli(a->fd, "-= Dialog objects:\n\n");