[ospfd] Fix bad SPF calculation on some topologies - incorrect sorting

2007-08-07 Atis Elsts <atis@mikrotik.com>

	* ospf_spf.c: (ospf_spf_next) Sort heap in correct direction
	  after vertex cost is changed, thus fixing incorrect SPF
	  calculation on certain topologies.
	* lib/pqueue.{c,h}: Export trickle_up
diff --git a/ospfd/ospf_spf.c b/ospfd/ospf_spf.c
index 51e3383..41288f1 100644
--- a/ospfd/ospf_spf.c
+++ b/ospfd/ospf_spf.c
@@ -896,9 +896,12 @@
                * will flush the old parents
                */
               if (ospf_nexthop_calculation (area, v, w, l, distance))
-                /* Decrease the key of the node in the heap,
-                 * re-sort the heap. */
-                trickle_down (w_lsa->stat, candidate);
+                /* Decrease the key of the node in the heap.
+                 * trickle-sort it up towards root, just in case this
+                 * node should now be the new root due the cost change. 
+                 * (pqueu_{de,en}queue 
+                 */
+                trickle_up (w_lsa->stat, candidate);
             }
         } /* end W is already on the candidate list */
     } /* end loop over the links in V's LSA */