diff options
Diffstat (limited to 'zebra/main.c')
| -rw-r--r-- | zebra/main.c | 30 |
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); } |
