summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_packet.c7
1 files changed, 6 insertions, 1 deletions
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);