From: Russell Bryant Date: Mon, 25 Apr 2011 19:04:28 +0000 (+0000) Subject: Merged revisions 315212 via svnmerge from X-Git-Tag: 1.8.5-rc1~11^2~201 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f575dd53974ef2e7cbcf50f81c3b3a1e5d7a5938;p=thirdparty%2Fasterisk.git 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/branches/1.8@315213 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_sip.c b/channels/chan_sip.c index bcd080a87b..7d000094c8 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -13351,7 +13351,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"); } @@ -13404,7 +13404,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; @@ -16125,6 +16127,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), ®l); ast_cli(a->fd, "-= Dialog objects:\n\n");