diff options
author | Jorge Boncompte [DTI2] <jorge@dti2.net> | 2012-05-07 16:53:07 +0000 |
---|---|---|
committer | David Lamparter <equinox@opensourcerouting.org> | 2012-05-22 20:35:47 +0200 |
commit | 6a4677b723b6f79997ca15ee202c36d528d3dfcf (patch) | |
tree | d1928cd0835791b91870bfb9e4fb9eea3c75b07b /bgpd | |
parent | 577ac57b78e0ee3cbc5afdb5f54a660bd0126136 (diff) |
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>
Diffstat (limited to 'bgpd')
-rw-r--r-- | bgpd/bgp_packet.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c index cfa0b57c..024f5e7b 100644 --- a/bgpd/bgp_packet.c +++ b/bgpd/bgp_packet.c @@ -1854,8 +1854,8 @@ bgp_update_receive (struct peer *peer, bgp_size_t size) 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; } |