]> git.puffer.fish Git - mirror/frr.git/commitdiff
[ospfd] external LSA route_unlock_node() fixes
authorJoakim Tjernlund <Joakim.Tjernlund@transmode.se>
Wed, 4 Feb 2009 14:05:19 +0000 (15:05 +0100)
committerPaul Jakma <paul@quagga.net>
Thu, 25 Jun 2009 13:00:40 +0000 (14:00 +0100)
A few route_unlock_node() calls was missing.

ospfd/ospf_ase.c

index a4812345c18243ce3f26998d79b6fade2ee60ba5..3eb29f8acfc777868d974f4a041a6b33ff5552da 100644 (file)
@@ -448,20 +448,23 @@ ospf_ase_calculate_route (struct ospf *ospf, struct ospf_lsa * lsa)
 
   /* if there is a Intra/Inter area route to the N
      do not install external route */
-  if ((rn = route_node_lookup (ospf->new_table,
-                              (struct prefix *) &p)) != NULL
-      && (rn->info != NULL))
+  if (rn = route_node_lookup (ospf->new_table,
+                             (struct prefix *) &p))
     {
+      route_unlock_node(rn);
+      if (rn->info == NULL)
+       zlog_info ("Route[External]: rn->info NULL");
       if (new)
        ospf_route_free (new);
       return 0;
     }
-  
   /* Find a route to the same dest */
   /* If there is no route, create new one. */
-  if ((rn = route_node_lookup (ospf->new_external_route,
-                              (struct prefix *) &p)) == NULL 
-      || (or = rn->info) == NULL)
+  if (rn = route_node_lookup (ospf->new_external_route,
+                              (struct prefix *) &p))
+      route_unlock_node(rn);
+
+  if (!rn || (or = rn->info) == NULL)
     {
       if (IS_DEBUG_OSPF (lsa, LSA))
        zlog_debug ("Route[External]: Adding a new route %s/%d",
@@ -783,16 +786,18 @@ ospf_ase_incremental_update (struct ospf *ospf, struct ospf_lsa *lsa)
      (internal routes take precedence). */
   
   rn = route_node_lookup (ospf->new_table, (struct prefix *) &p);
-  if (rn && rn->info)
+  if (rn)
     {
       route_unlock_node (rn);
-      return;
+      if (rn->info)
+       return;
     }
 
   rn = route_node_lookup (ospf->external_lsas, (struct prefix *) &p);
   assert (rn && rn->info);
   lsas = rn->info;
-  
+  route_unlock_node (rn);
+
   for (ALL_LIST_ELEMENTS_RO (lsas, node, lsa))
     ospf_ase_calculate_route (ospf, lsa);