]> git.puffer.fish Git - matthieu/frr.git/commitdiff
ospf6d: Fix memory allocation issues in SPF
authorTom Goff <thomas.goff@boeing.com>
Wed, 10 Nov 2010 21:02:38 +0000 (13:02 -0800)
committerPaul Jakma <paul@quagga.net>
Mon, 21 Mar 2011 13:31:16 +0000 (13:31 +0000)
* ospf6_area.c: Call ospf6_spf_table_finish() before deleting the spf
    table.  This ensures that the associated ospf6_vertex structures
    are also freed.
* ospf6_spf.c: Only allocate a priority queue when a spf calculation
    is actually performed.  Also defer calling ospf6_spf_table_finish().

ospf6d/ospf6_area.c
ospf6d/ospf6_spf.c

index 3c999bbcc9824e924e351693ab5ba9c67de15a3f..bf8dbc33f7287144e760971af421ddf800a61c1b 100644 (file)
@@ -199,6 +199,7 @@ ospf6_area_delete (struct ospf6_area *oa)
   ospf6_lsdb_delete (oa->lsdb);
   ospf6_lsdb_delete (oa->lsdb_self);
 
+  ospf6_spf_table_finish (oa->spf_table);
   ospf6_route_table_delete (oa->spf_table);
   ospf6_route_table_delete (oa->route_table);
 
index 04367f083773e0b1ea7530cc38ce4c6a78c11918..cb5496187c44bdff02eba34c48838913e7cdcfc1 100644 (file)
@@ -392,18 +392,19 @@ ospf6_spf_calculation (u_int32_t router_id,
   caddr_t lsdesc;
   struct ospf6_lsa *lsa;
 
-  /* initialize */
-  candidate_list = pqueue_create ();
-  candidate_list->cmp = ospf6_vertex_cmp;
-
-  ospf6_spf_table_finish (result_table);
-
   /* Install the calculating router itself as the root of the SPF tree */
   /* construct root vertex */
   lsa = ospf6_lsdb_lookup (htons (OSPF6_LSTYPE_ROUTER), htonl (0),
                            router_id, oa->lsdb);
   if (lsa == NULL)
     return;
+
+  /* initialize */
+  candidate_list = pqueue_create ();
+  candidate_list->cmp = ospf6_vertex_cmp;
+
+  ospf6_spf_table_finish (result_table);
+
   root = ospf6_vertex_create (lsa);
   root->area = oa;
   root->cost = 0;