From 2bb745fe0257f95a451a195830f0046440767025 Mon Sep 17 00:00:00 2001 From: Quentin Young Date: Fri, 31 Mar 2017 16:55:52 +0000 Subject: [PATCH] bgpd: stop pseudo-blocking in bgp_write If write() indicates that we should retry, just move along to the next peer and come back later. No need to burn write() in a loop. Signed-off-by: Quentin Young --- bgpd/bgp_packet.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c index 0ff74a5ade..02ea92a4d1 100644 --- a/bgpd/bgp_packet.c +++ b/bgpd/bgp_packet.c @@ -2202,10 +2202,9 @@ static int bgp_write(struct peer *peer) num = write(peer->fd, STREAM_PNT(s), writenum); if (num < 0) { - if (ERRNO_IO_RETRY(errno)) - continue; + if (!ERRNO_IO_RETRY(errno)) + BGP_EVENT_ADD(peer, TCP_fatal_error); - BGP_EVENT_ADD(peer, TCP_fatal_error); goto done; } else if (num != writenum) // incomplete write stream_forward_getp(s, num);