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>
diff --git a/ospfd/ospf_ase.c b/ospfd/ospf_ase.c
index 027e49f..74c1711 100644
--- a/ospfd/ospf_ase.c
+++ b/ospfd/ospf_ase.c
@@ -723,6 +723,8 @@
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 @@
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);
}
}