summaryrefslogtreecommitdiff
path: root/bgpd/bgp_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'bgpd/bgp_main.c')
-rw-r--r--bgpd/bgp_main.c20
1 files changed, 5 insertions, 15 deletions
diff --git a/bgpd/bgp_main.c b/bgpd/bgp_main.c
index 25a562ed68..3bf9ea02d5 100644
--- a/bgpd/bgp_main.c
+++ b/bgpd/bgp_main.c
@@ -140,11 +140,8 @@ __attribute__((__noreturn__)) void sigint(void)
{
zlog_notice("Terminating on signal");
- if (!retain_mode) {
+ if (!retain_mode)
bgp_terminate();
- if (bgpd_privs.user) /* NULL if skip_runas flag set */
- zprivs_terminate(&bgpd_privs);
- }
bgp_exit(0);
@@ -172,13 +169,12 @@ static __attribute__((__noreturn__)) void bgp_exit(int status)
/* it only makes sense for this to be called on a clean exit */
assert(status == 0);
+ frr_early_fini();
+
bfd_gbl_exit();
bgp_close();
- if (retain_mode)
- if_add_hook(IF_DELETE_HOOK, NULL);
-
/* reverse bgp_master_init */
for (ALL_LIST_ELEMENTS(bm->bgp, node, nnode, bgp))
bgp_delete(bgp);
@@ -214,22 +210,16 @@ static __attribute__((__noreturn__)) void bgp_exit(int status)
community_list_terminate(bgp_clist);
bgp_vrf_terminate();
- cmd_terminate();
- vty_terminate();
#if ENABLE_BGP_VNC
vnc_zebra_destroy();
#endif
bgp_zebra_destroy();
- /* reverse bgp_master_init */
- if (bm->master)
- thread_master_free(bm->master);
-
- closezlog();
-
list_delete(bm->bgp);
memset(bm, 0, sizeof(*bm));
+ frr_fini();
+
if (bgp_debug_count())
log_memstats_stderr("bgpd");
exit(status);