From: Tom Goff Date: Wed, 10 Nov 2010 21:02:38 +0000 (-0800) Subject: ospf6d: Fix memory allocation issues in SPF X-Git-Tag: frr-2.0-rc1~2099 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=1d19234e79c77a7d55194b513f2a77c6a691bc2c;p=mirror%2Ffrr.git ospf6d: Fix memory allocation issues in SPF * 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(). --- diff --git a/ospf6d/ospf6_area.c b/ospf6d/ospf6_area.c index 3c999bbcc9..bf8dbc33f7 100644 --- a/ospf6d/ospf6_area.c +++ b/ospf6d/ospf6_area.c @@ -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); diff --git a/ospf6d/ospf6_spf.c b/ospf6d/ospf6_spf.c index 04367f0837..cb5496187c 100644 --- a/ospf6d/ospf6_spf.c +++ b/ospf6d/ospf6_spf.c @@ -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;