diff --git a/bgpd/bgp_main.c b/bgpd/bgp_main.c index 7c1a9ea4a6..3ea74f2bdb 100644 --- a/bgpd/bgp_main.c +++ b/bgpd/bgp_main.c @@ -231,17 +231,17 @@ bgp_exit (int status) bgp_close(); - /* reverse bgp_master_init */ - for (ALL_LIST_ELEMENTS (bm->bgp, node, nnode, bgp)) - bgp_delete (bgp); - list_free (bm->bgp); - if (retain_mode) if_add_hook (IF_DELETE_HOOK, NULL); /* free interface and connected route information. */ bgp_if_finish (); + /* reverse bgp_master_init */ + for (ALL_LIST_ELEMENTS (bm->bgp, node, nnode, bgp)) + bgp_delete (bgp); + list_free (bm->bgp); + /* reverse bgp_attr_init */ bgp_attr_finish (); diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index ef2004295e..55320179e1 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -7182,13 +7182,13 @@ bgp_if_finish (void) for (ALL_LIST_ELEMENTS (bm->bgp, node, nnode, bgp)) { - struct listnode *ifnode; + struct listnode *ifnode, *ifnnode; struct interface *ifp; if (bgp->inst_type == BGP_INSTANCE_TYPE_VIEW) continue; - for (ALL_LIST_ELEMENTS_RO (vrf_iflist(bgp->vrf_id), ifnode, ifp)) + for (ALL_LIST_ELEMENTS (vrf_iflist(bgp->vrf_id), ifnode, ifnnode, ifp)) { struct listnode *c_node, *c_nnode; struct connected *c;