summaryrefslogtreecommitdiff
path: root/ldpd/neighbor.c
diff options
context:
space:
mode:
Diffstat (limited to 'ldpd/neighbor.c')
-rw-r--r--ldpd/neighbor.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/ldpd/neighbor.c b/ldpd/neighbor.c
index 9a92a00d32..7cd3a3fd7d 100644
--- a/ldpd/neighbor.c
+++ b/ldpd/neighbor.c
@@ -287,6 +287,8 @@ nbr_new(struct in_addr id, int af, int ds_tlv, union ldpd_addr *addr,
void
nbr_del(struct nbr *nbr)
{
+ struct adj *adj;
+
log_debug("%s: lsr-id %s", __func__, inet_ntoa(nbr->id));
nbr_fsm(nbr, NBR_EVT_CLOSE_SESSION);
@@ -312,6 +314,11 @@ nbr_del(struct nbr *nbr)
mapping_list_clr(&nbr->release_list);
mapping_list_clr(&nbr->abortreq_list);
+ while ((adj = RB_ROOT(&nbr->adj_tree)) != NULL) {
+ adj->nbr = NULL;
+ RB_REMOVE(nbr_adj_head, &nbr->adj_tree, adj);
+ }
+
if (nbr->peerid)
RB_REMOVE(nbr_pid_head, &nbrs_by_pid, nbr);
RB_REMOVE(nbr_id_head, &nbrs_by_id, nbr);