From 3f22218b48807e3d5fa4a041536f65e5352f358b Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Fri, 8 Jul 2022 20:39:28 -0400 Subject: [PATCH] bgpd: Prevent memory leak of listener on shutdown Signed-off-by: Donald Sharp --- bgpd/bgpd.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index 122830343c..cc15e6f688 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -8228,18 +8228,20 @@ void bgp_terminate(void) * of a large number of peers this will ensure that no peer is left with * a dangling connection */ - /* reverse bgp_master_init */ + bgp_close(); - - if (bm->listen_sockets) - list_delete(&bm->listen_sockets); - - for (ALL_LIST_ELEMENTS(bm->bgp, mnode, mnnode, bgp)) + /* reverse bgp_master_init */ + for (ALL_LIST_ELEMENTS(bm->bgp, mnode, mnnode, bgp)) { + bgp_close_vrf_socket(bgp); for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) if (peer_established(peer) || peer->status == OpenSent || peer->status == OpenConfirm) bgp_notify_send(peer, BGP_NOTIFY_CEASE, BGP_NOTIFY_CEASE_PEER_UNCONFIG); + } + + if (bm->listen_sockets) + list_delete(&bm->listen_sockets); BGP_TIMER_OFF(bm->t_rmap_update);