From d0ad6d8e5f21f594102db115d429963e12398a9c Mon Sep 17 00:00:00 2001 From: Quentin Young Date: Mon, 13 Nov 2017 03:18:49 -0500 Subject: [PATCH] bgpd: yield more when generating UPDATEs In the same vein as the round-robin input commit, this re-adds logic for limiting the amount of time spent generating UPDATEs per generation cycle. Missed this when shifting around wpkt_quanta; prior to MT it limited both calls to write() as well as UPDATE generation. --- bgpd/bgp_packet.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c index d814d6eb99..fe633413c2 100644 --- a/bgpd/bgp_packet.c +++ b/bgpd/bgp_packet.c @@ -371,9 +371,14 @@ int bgp_generate_updgrp_packets(struct thread *thread) struct stream *s; struct peer_af *paf; struct bpacket *next_pkt; + uint32_t wpq; + uint32_t generated = 0; afi_t afi; safi_t safi; + wpq = atomic_load_explicit(&peer->bgp->wpkt_quanta, + memory_order_relaxed); + /* * The code beyond this part deals with update packets, proceed only * if peer is Established and updates are not on hold (as part of @@ -458,7 +463,7 @@ int bgp_generate_updgrp_packets(struct thread *thread) bgp_writes_on(peer); bpacket_queue_advance_peer(paf); } - } while (s); + } while (s && (++generated < wpq)); bgp_write_proceed_actions(peer); -- 2.39.5