From: David Lamparter Date: Sat, 23 Nov 2013 15:55:36 +0000 (+0100) Subject: ospf6d: fix interface_down() stopping hellos X-Git-Tag: frr-2.0-rc1~1628^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=424cc3bd48da0f417c9056c5c2ade697a3386cd4;p=mirror%2Ffrr.git ospf6d: fix interface_down() stopping hellos interface_down() - which also handles some nonobvious cases like the last linklocal address disappearing - was previously not cancelling the hello timer. This had the effect of multiple such threads ending up scheduled after a quick down-up cycle. Signed-off-by: David Lamparter --- diff --git a/ospf6d/ospf6_interface.c b/ospf6d/ospf6_interface.c index 8d4276458d..b0f11194ac 100644 --- a/ospf6d/ospf6_interface.c +++ b/ospf6d/ospf6_interface.c @@ -683,7 +683,7 @@ interface_up (struct thread *thread) /* Schedule Hello */ if (! CHECK_FLAG (oi->flag, OSPF6_INTERFACE_PASSIVE)) - thread_add_event (master, ospf6_hello_send, oi, 0); + oi->thread_send_hello = thread_add_event (master, ospf6_hello_send, oi, 0); /* decide next interface state */ if ((if_is_pointopoint (oi->interface)) || @@ -771,6 +771,9 @@ interface_down (struct thread *thread) zlog_debug ("Interface Event %s: [InterfaceDown]", oi->interface->name); + /* Stop Hellos */ + THREAD_OFF (oi->thread_send_hello); + /* Leave AllSPFRouters */ if (oi->state > OSPF6_INTERFACE_DOWN) ospf6_sso (oi->interface->ifindex, &allspfrouters6, IPV6_LEAVE_GROUP);