summaryrefslogtreecommitdiff
path: root/bgpd/bgp_packet.c
diff options
context:
space:
mode:
Diffstat (limited to 'bgpd/bgp_packet.c')
-rw-r--r--bgpd/bgp_packet.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
index 5d4cf2a6aa..9e7c75318e 100644
--- a/bgpd/bgp_packet.c
+++ b/bgpd/bgp_packet.c
@@ -487,6 +487,16 @@ void bgp_generate_updgrp_packets(struct thread *thread)
if (peer->t_routeadv)
return;
+ /*
+ * Since the following is a do while loop
+ * let's stop adding to the outq if we are
+ * already at the limit.
+ */
+ if (peer->obuf->count >= bm->outq_limit) {
+ bgp_write_proceed_actions(peer);
+ return;
+ }
+
do {
enum bgp_af_index index;
@@ -609,7 +619,8 @@ void bgp_generate_updgrp_packets(struct thread *thread)
bgp_packet_add(peer, s);
bpacket_queue_advance_peer(paf);
}
- } while (s && (++generated < wpq));
+ } while (s && (++generated < wpq) &&
+ (peer->obuf->count <= bm->outq_limit));
if (generated)
bgp_writes_on(peer);