bgpd: optimize holdtime timer cancelling

* bgp_packet.c: (bgp_update_receive) for every update received we queue
  an event just to cancel the holdtime timer, done in bgp_fsm_update().
  Instead cancel the timer directly an avoid a scheduling pass.

  This incidently fixes another problem found on a slow box, where thousands
of events threads were queued, and run, but never freed, because they are
moved to the unused list that grows without bounds.

Signed-off-by: Jorge Boncompte [DTI2] <jorge@dti2.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
index cfa0b57..024f5e7 100644
--- a/bgpd/bgp_packet.c
+++ b/bgpd/bgp_packet.c
@@ -1854,8 +1854,8 @@
   peer->update_in++;
   peer->update_time = bgp_clock ();
 
-  /* Generate BGP event. */
-  BGP_EVENT_ADD (peer, Receive_UPDATE_message);
+  /* Cancel holdtime timer */
+  BGP_TIMER_OFF (peer->t_holdtime);
 
   return 0;
 }