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.
This commit is contained in:
Tom Goff 2010-11-10 13:03:02 -08:00 committed by Paul Jakma
parent ae2254aa7f
commit e7a6d80d4f
2 changed files with 4 additions and 1 deletions

View File

@ -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))

View File

@ -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;
}