ospfd: ospf_ase.c, external_lsa locking fixes.

Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
Acked-by: Feng Lu <lu.feng@6wind.com>
(cherry picked from commit fc363cd8a02ad1ac8a6ca57013fd8c531d45926a)
This commit is contained in:
Joakim Tjernlund 2010-03-08 13:58:12 +01:00 committed by Daniel Walton
parent 58a1e062da
commit d8d939a61e

View File

@ -723,6 +723,8 @@ ospf_ase_register_external_lsa (struct ospf_lsa *lsa, struct ospf *top)
rn = route_node_get (top->external_lsas, (struct prefix *) &p);
if ((lst = rn->info) == NULL)
rn->info = lst = list_new();
else
route_unlock_node (rn);
/* We assume that if LSA is deleted from DB
is is also deleted from this RT */
@ -743,13 +745,13 @@ ospf_ase_unregister_external_lsa (struct ospf_lsa *lsa, struct ospf *top)
p.prefixlen = ip_masklen (al->mask);
apply_mask_ipv4 (&p);
rn = route_node_get (top->external_lsas, (struct prefix *) &p);
lst = rn->info;
rn = route_node_lookup (top->external_lsas, (struct prefix *) &p);
/* XXX lst can be NULL */
if (lst) {
if (rn) {
lst = rn->info;
listnode_delete (lst, lsa);
ospf_lsa_unlock (&lsa); /* external_lsas list */
route_unlock_node (rn);
}
}