]> git.puffer.fish Git - mirror/frr.git/commitdiff
ospfd: ospf_ase.c, external_lsa locking fixes.
authorJoakim Tjernlund <Joakim.Tjernlund@transmode.se>
Mon, 8 Mar 2010 12:58:12 +0000 (13:58 +0100)
committerDaniel Walton <dwalton@cumulusnetworks.com>
Thu, 26 May 2016 15:33:31 +0000 (15:33 +0000)
Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se>
Acked-by: Feng Lu <lu.feng@6wind.com>
(cherry picked from commit fc363cd8a02ad1ac8a6ca57013fd8c531d45926a)

ospfd/ospf_ase.c

index ffbc89fa5755f88533647b6ee53e2050ea3b14c7..af1abfbc93944af32096b1d845e7dc0a92a24355 100644 (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);
   }
 }