]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 281430 via svnmerge from
authorDavid Vossel <dvossel@digium.com>
Mon, 9 Aug 2010 20:47:53 +0000 (20:47 +0000)
committerDavid Vossel <dvossel@digium.com>
Mon, 9 Aug 2010 20:47:53 +0000 (20:47 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.6.2

........
  r281430 | dvossel | 2010-08-09 15:46:50 -0500 (Mon, 09 Aug 2010) | 13 lines

  fixes SIP peers memory leak

  We zeroed out the peer's addr before it was removed from the
  peers_by_ip container.  This made it impossible to be removed
  from the container as the addr is the key used by the container
  to find the peer.

  (closes issue #17774)
  Reported by: kkm
  Patches:
        017774-sip-peer-leak-1.6.2.10.diff uploaded by kkm (license 888)
        017774-sip-peer-leak-1.8.diff uploaded by kkm (license 888)
........

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

channels/chan_sip.c

index 47dc2610d92361de96a3f4cab338c3351916f25d..cdf598a6629e167f5c6bfda5ef36021074d3283f 100644 (file)
@@ -12652,7 +12652,6 @@ static int expire_register(const void *data)
 
        peer->expire = -1;
        peer->portinuri = 0;
-       memset(&peer->addr, 0, sizeof(peer->addr));
 
        destroy_association(peer);      /* remove registration data from storage */
        set_socket_transport(&peer->socket, peer->default_outbound_transport);
@@ -12681,6 +12680,10 @@ static int expire_register(const void *data)
                }
        }
 
+       /* Only clear the addr after we check for destruction.  The addr must remain
+        * in order to unlink from the peers_by_ip container correctly */
+       memset(&peer->addr, 0, sizeof(peer->addr));
+
        unref_peer(peer, "removing peer ref for expire_register");
 
        return 0;