diff --git a/channels/chan_sip.c b/channels/chan_sip.c index bba34fb4e346a09543de3a0097058855a8fcf254..350dc53069eb720b552c31df4883406a8abbc550 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -12655,7 +12655,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); @@ -12684,6 +12683,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;