From b4171c971ab0a59861907ad22a0633b400a5d0d1 Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Wed, 24 Feb 2016 21:30:39 -0800 Subject: [PATCH] Avoid double call of send_del() on write failure and from epoll loop. --- adsbus/send.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/adsbus/send.c b/adsbus/send.c index 82d22cb..0aaea10 100644 --- a/adsbus/send.c +++ b/adsbus/send.c @@ -156,13 +156,11 @@ void send_write(struct packet *packet) { } struct send *send = serializer->send_head; while (send) { - if (write(send->peer.fd, buf_at(&buf, 0), buf.length) == buf.length) { - send = send->next; - } else { - struct send *next = send->next; - send_del(send); - send = next; + if (write(send->peer.fd, buf_at(&buf, 0), buf.length) != buf.length) { + // peer_loop() will see this shutdown and call send_del + shutdown(send->peer.fd, SHUT_RD | SHUT_WR); } + send = send->next; } } }