From d8d939a61eb27fbb175d99a46ba8e61dddb34e81 Mon Sep 17 00:00:00 2001 From: Joakim Tjernlund Date: Mon, 8 Mar 2010 13:58:12 +0100 Subject: [PATCH] ospfd: ospf_ase.c, external_lsa locking fixes. Signed-off-by: Joakim Tjernlund Acked-by: Feng Lu (cherry picked from commit fc363cd8a02ad1ac8a6ca57013fd8c531d45926a) --- ospfd/ospf_ase.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ospfd/ospf_ase.c b/ospfd/ospf_ase.c index ffbc89fa57..af1abfbc93 100644 --- a/ospfd/ospf_ase.c +++ b/ospfd/ospf_ase.c @@ -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); } } -- 2.39.5