diff options
author | Tom Goff <thomas.goff@boeing.com> | 2010-11-10 13:02:38 -0800 |
---|---|---|
committer | Denis Ovsienko <infrastation@yandex.ru> | 2011-09-25 18:15:27 +0400 |
commit | 158dd4d00ecb0af0d1a77fdc7d4844fc88a0f10f (patch) | |
tree | aa5b6a51272c57bd086e4e87da22cfab421f475f | |
parent | f7c91fc330b802e95e23d52b498ae61b0e8669a9 (diff) |
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.
-rw-r--r-- | ospf6d/ospf6_area.c | 1 | ||||
-rw-r--r-- | ospf6d/ospf6_spf.c | 9 |
2 files changed, 6 insertions, 4 deletions
diff --git a/ospf6d/ospf6_area.c b/ospf6d/ospf6_area.c index 0224fe68..9934e6b9 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 e78f7f6a..a4a5b721 100644 --- a/ospf6d/ospf6_spf.c +++ b/ospf6d/ospf6_spf.c @@ -391,10 +391,6 @@ 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 */ @@ -403,6 +399,11 @@ ospf6_spf_calculation (u_int32_t router_id, router_id, oa->lsdb); if (lsa == NULL) return; + + /* initialize */ + candidate_list = pqueue_create (); + candidate_list->cmp = ospf6_vertex_cmp; + root = ospf6_vertex_create (lsa); root->area = oa; root->cost = 0; |