]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
net_transmit() may have wrongly returned EPIPE error.
authorTimo Sirainen <tss@iki.fi>
Thu, 30 Jan 2014 21:03:40 +0000 (22:03 +0100)
committerTimo Sirainen <tss@iki.fi>
Thu, 30 Jan 2014 21:03:40 +0000 (22:03 +0100)
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.

src/lib/net.c

index 7f4e906be42a9030d6ff7a3ada118e0b8ba690db..1d6a1e2ba24a5b0c9d1d8e902933b665f5df9d15 100644 (file)
@@ -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;
 }