From d34d46a16ee2ccafb4503eefcb91c282b466a12a Mon Sep 17 00:00:00 2001 From: Terry Wilson Date: Mon, 16 May 2011 18:21:17 +0000 Subject: [PATCH] Merged revisions 319204 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.8 ................ r319204 | twilson | 2011-05-16 13:17:43 -0500 (Mon, 16 May 2011) | 11 lines Merged revisions 319202 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.6.2 ........ r319202 | twilson | 2011-05-16 11:00:21 -0700 (Mon, 16 May 2011) | 4 lines Unlink a peer from peers_by_ip when expiring a registration Review: https://reviewboard.asterisk.org/r/1218/ ........ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@319212 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index e15eb74696..0aa13505ac 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -13398,6 +13398,11 @@ static int expire_register(const void *data) if (peer->selfdestruct || ast_test_flag(&peer->flags[1], SIP_PAGE2_RTAUTOCLEAR)) { unlink_peer_from_tables(peer); + } else if (!ast_sockaddr_isnull(&peer->addr)) { + /* If we aren't self-destructing a temp_peer, we still need to unlink the peer + * from the peers_by_ip table, otherwise we end up with multiple copies hanging + * around each time a registration expires and the peer re-registers. */ + ao2_t_unlink(peers_by_ip, peer, "ao2_unlink of peer from peers_by_ip table"); } /* Only clear the addr after we check for destruction. The addr must remain