From: vivek Date: Wed, 17 Feb 2016 16:41:33 +0000 (-0800) Subject: BGP: Ensure correct sequence of processing at exit X-Git-Tag: frr-2.0-rc1~1122^2~3 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=46abd3e3e6eb1f723ea7905c9919b65f1a76f385;p=mirror%2Ffrr.git BGP: Ensure correct sequence of processing at exit With VRF support, certain objects are now maintained per BGP instance. At exit, the list of BGP instances has to be freed only after processing the per-instance objects. Signed-off-by: Vivek Venkatraman Fixes: ad4cbda1a32f0bf49d794ab5b156d49f95645871 Ticket: CM-9340 Reviewed By: Testing Done: --- 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;