From: Timo Sirainen Date: Thu, 30 Jan 2014 21:03:40 +0000 (+0100) Subject: net_transmit() may have wrongly returned EPIPE error. X-Git-Tag: 2.2.11~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e3d57448ca8612ebf4b7f652367c30562493860b;p=thirdparty%2Fdovecot%2Fcore.git net_transmit() may have wrongly returned EPIPE error. If errno was EPIPE before net_transmit() was called and sendto() didn't change it, we still returned error. Also removed the unlikely() call which isn't all that unlikely for non-blocking code. --- diff --git a/src/lib/net.c b/src/lib/net.c index 7f4e906be4..1d6a1e2ba2 100644 --- a/src/lib/net.c +++ b/src/lib/net.c @@ -605,12 +605,12 @@ ssize_t net_transmit(int fd, const void *data, size_t len) i_assert(len <= SSIZE_T_MAX); ret = send(fd, data, len, 0); - if (unlikely(ret == -1 && (errno == EINTR || errno == EAGAIN))) - return 0; - - if (unlikely(errno == EPIPE)) - return -2; - + if (ret == -1) { + if (errno == EINTR || errno == EAGAIN) + return 0; + if (errno == EPIPE) + return -2; + } return ret; }