From 65cd7a4a66145cf666df707781c3e46297158c58 Mon Sep 17 00:00:00 2001 From: Tom Goff Date: Wed, 10 Nov 2010 13:03:02 -0800 Subject: ospf6d: Route locking (memory) cleanup * ospf6_route.c: (ospf6_route_best_next) Allows unlock route, even when there's no next route. This is consistent with how ospf6_route_next() behaves. * ospf6_intra.c: (ospf6_intra_prefix_lsa_remove) Make sure the last route considered is always unlocked. This is needed when the for loop terminates because ospf6_route_is_prefix() returns zero. Signed-off-by: Vyacheslav Trushkin --- ospf6d/ospf6_intra.c | 2 ++ ospf6d/ospf6_route.c | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/ospf6d/ospf6_intra.c b/ospf6d/ospf6_intra.c index 05b11ba3..9bc603b3 100644 --- a/ospf6d/ospf6_intra.c +++ b/ospf6d/ospf6_intra.c @@ -1177,6 +1177,8 @@ ospf6_intra_prefix_lsa_remove (struct ospf6_lsa *lsa) } ospf6_route_remove (route, oa->route_table); } + if (route) + ospf6_route_unlock (route); } if (current != end && IS_OSPF6_DEBUG_EXAMIN (INTRA_PREFIX)) diff --git a/ospf6d/ospf6_route.c b/ospf6d/ospf6_route.c index 2d027101..398acfa8 100644 --- a/ospf6d/ospf6_route.c +++ b/ospf6d/ospf6_route.c @@ -690,6 +690,8 @@ ospf6_route_best_next (struct ospf6_route *route) struct route_node *rnode; struct ospf6_route *next; + ospf6_route_unlock (route); + rnode = route->rnode; route_lock_node (rnode); rnode = route_next (rnode); @@ -701,7 +703,6 @@ ospf6_route_best_next (struct ospf6_route *route) assert (rnode->info); next = (struct ospf6_route *) rnode->info; - ospf6_route_unlock (route); ospf6_route_lock (next); return next; } -- cgit v1.2.1