summaryrefslogtreecommitdiff
path: root/zebra/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'zebra/main.c')
-rw-r--r--zebra/main.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/zebra/main.c b/zebra/main.c
index 9247d43507..4fea0104f5 100644
--- a/zebra/main.c
+++ b/zebra/main.c
@@ -182,20 +182,46 @@ sighup (void)
static void
sigint (void)
{
+ struct vrf *vrf;
+ struct zebra_vrf *zvrf;
struct zebra_ns *zns;
zlog_notice ("Terminating on signal");
- if (!retain_mode)
- rib_close ();
#ifdef HAVE_IRDP
irdp_finish();
#endif
zebra_ptm_finish();
+ list_delete_all_node (zebrad.client_list);
+
+ if (retain_mode)
+ RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
+ {
+ zvrf = vrf->info;
+ if (zvrf)
+ SET_FLAG (zvrf->flags, ZEBRA_VRF_RETAIN);
+ }
+ vrf_terminate ();
zns = zebra_ns_lookup (NS_DEFAULT);
zebra_ns_disable (0, (void **)&zns);
+
+ access_list_reset ();
+ prefix_list_reset ();
+ route_map_finish ();
+ cmd_terminate ();
+ vty_terminate ();
+ zprivs_terminate (&zserv_privs);
+ list_delete (zebrad.client_list);
+ work_queue_free (zebrad.ribq);
+ if (zebrad.lsp_process_q)
+ work_queue_free (zebrad.lsp_process_q);
+ meta_queue_free (zebrad.mq);
+ thread_master_free (zebrad.master);
+ if (zlog_default)
+ closezlog (zlog_default);
+
exit (0);
}