summaryrefslogtreecommitdiff
path: root/ospf6d/ospf6_top.c
diff options
context:
space:
mode:
authorTom Goff <thomas.goff@boeing.com>2010-11-10 13:01:41 -0800
committerPaul Jakma <paul@quagga.net>2011-03-21 13:31:16 +0000
commitae2254aa7f2eb7436734f497658f1f26f4bf37c7 (patch)
tree8734f0e2aa855b90d9ec5cb961cd9990b5574905 /ospf6d/ospf6_top.c
parentfd795eb89cc421097f6580016ea9fbd3585d07bb (diff)
ospf6d: Have ospf6d cleanup when it terminates normally
A clean exit makes it easier to use memory debuggers. * ospf6_asbr.c: (ospf6_asbr_terminate) Add a function to do route map cleanup. * ospf6_lsa.c: (ospf6_lsa_terminate) Add a function to cleanup the lsa handler vector. * ospf6_main.c: (ospf6_exit) Add an function that causes ospf6d to gracefully exit. * ospf6_message.c: (ospf6_message_terminate) Add a function that frees the send and receive buffers. * ospf6_top.c: (ospf6_delete) Enable the ospf6_delete() function. Disable ospf6 before freeing everything.
Diffstat (limited to 'ospf6d/ospf6_top.c')
-rw-r--r--ospf6d/ospf6_top.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/ospf6d/ospf6_top.c b/ospf6d/ospf6_top.c
index 82370268..2b65be82 100644
--- a/ospf6d/ospf6_top.c
+++ b/ospf6d/ospf6_top.c
@@ -51,6 +51,8 @@
/* global ospf6d variable */
struct ospf6 *ospf6;
+static void ospf6_disable (struct ospf6 *o);
+
static void
ospf6_top_lsdb_hook_add (struct ospf6_lsa *lsa)
{
@@ -143,15 +145,17 @@ ospf6_create (void)
return o;
}
-#if 0
-static void
+void
ospf6_delete (struct ospf6 *o)
{
struct listnode *node, *nnode;
struct ospf6_area *oa;
+ ospf6_disable (ospf6);
+
for (ALL_LIST_ELEMENTS (o->area_list, node, nnode, oa))
ospf6_area_delete (oa);
+ list_delete (o->area_list);
ospf6_lsdb_delete (o->lsdb);
ospf6_lsdb_delete (o->lsdb_self);
@@ -164,7 +168,6 @@ ospf6_delete (struct ospf6 *o)
XFREE (MTYPE_OSPF6_TOP, o);
}
-#endif
static void
ospf6_enable (struct ospf6 *o)