]> git.puffer.fish Git - mirror/frr.git/commitdiff
ospfd: make ospf_maxage_lsa_remover actually yield
authorChristian Franke <chris@opensourcerouting.org>
Wed, 20 Feb 2013 10:00:52 +0000 (10:00 +0000)
committerDavid Lamparter <equinox@diac24.net>
Sat, 20 Apr 2013 04:12:13 +0000 (06:12 +0200)
ospf_maxage_lsa_remover whould check whether to yield,
but run on anyway.

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
Signed-off-by: David Lamparter <equinox@diac24.net>
ospfd/ospf_lsa.c

index dfd1a61e2a3e84efef20a28ba3983b98bccc74cb..e0e05ab84adb7b5580cc82345bc9e604f30cab56 100644 (file)
@@ -2843,6 +2843,9 @@ ospf_maxage_lsa_remover (struct thread *thread)
            continue;
          }
 
+        /* There is at least one neighbor from which we still await an ack
+         * for that LSA, so we are not allowed to remove it from our lsdb yet
+         * as per RFC 2328 section 14 para 4 a) */
         if (lsa->retransmit_counter > 0)
           {
             reschedule = 1;
@@ -2851,7 +2854,10 @@ ospf_maxage_lsa_remover (struct thread *thread)
         
         /* TODO: maybe convert this function to a work-queue */
         if (thread_should_yield (thread))
-          OSPF_TIMER_ON (ospf->t_maxage, ospf_maxage_lsa_remover, 0);
+          {
+            OSPF_TIMER_ON (ospf->t_maxage, ospf_maxage_lsa_remover, 0);
+            return 0;
+          }
           
         /* Remove LSA from the LSDB */
         if (IS_LSA_SELF (lsa))