]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Unlink a peer from peers_by_ip when expiring a registration
authorTerry Wilson <twilson@digium.com>
Mon, 16 May 2011 18:00:21 +0000 (18:00 +0000)
committerTerry Wilson <twilson@digium.com>
Mon, 16 May 2011 18:00:21 +0000 (18:00 +0000)
Review: https://reviewboard.asterisk.org/r/1218/

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.2@319202 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 14b4940cb85050f3f4cde78ed4a082c117bbfdf3..a153f15e1841813a7bc31910c55380d02d8e027f 100644 (file)
@@ -12605,6 +12605,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 (peer->addr.sin_addr.s_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