diff options
author | Christian Franke <chris@opensourcerouting.org> | 2013-02-20 10:00:52 +0000 |
---|---|---|
committer | David Lamparter <equinox@diac24.net> | 2013-04-20 06:12:13 +0200 |
commit | 4de8bf001189d40e086764fd804e59657d2e21e6 (patch) | |
tree | 367c46fff12691e2622abc1d23ea0f95fdb97504 | |
parent | 77ef01392f82c27a9892840c61a5e7391fd82415 (diff) |
ospfd: make ospf_maxage_lsa_remover actually yield
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>
-rw-r--r-- | ospfd/ospf_lsa.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/ospfd/ospf_lsa.c b/ospfd/ospf_lsa.c index dfd1a61e..e0e05ab8 100644 --- a/ospfd/ospf_lsa.c +++ b/ospfd/ospf_lsa.c @@ -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)) |