From: Willy Tarreau Date: Sat, 15 Dec 2012 09:12:39 +0000 (+0100) Subject: BUG/MINOR: stream_interface: don't return when the fd is already set X-Git-Tag: v1.5-dev16~29 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b01658706809693e8a018999a93948828b3a14ff;p=thirdparty%2Fhaproxy.git BUG/MINOR: stream_interface: don't return when the fd is already set Back in the days where polling was made with select() where all FDs were checked at once, stream_int_chk_snd_conn() used to check whether the file descriptor it was passed was ready or not, so that it did not perform the work for nothing. Right now FDs are checked just before calling the I/O handler so this test never matches at best, or may return false information at worst. Since conn_fd_handler() always clears the flags upon exit, it looks like a missed event cannot happen right now. Still, better remove this outdated check than wait for it to cause issues. --- diff --git a/src/stream_interface.c b/src/stream_interface.c index 32cd21119a..5f6d85d65e 100644 --- a/src/stream_interface.c +++ b/src/stream_interface.c @@ -795,8 +795,7 @@ static void stream_int_chk_snd_conn(struct stream_interface *si) return; if (!ob->pipe && /* spliced data wants to be forwarded ASAP */ - (!(si->flags & SI_FL_WAIT_DATA) || /* not waiting for data */ - (fdtab[si->conn->t.sock.fd].ev & FD_POLL_OUT))) /* we'll be called anyway */ + !(si->flags & SI_FL_WAIT_DATA)) /* not waiting for data */ return; if (!(si->conn->flags & (CO_FL_HANDSHAKE|CO_FL_WAIT_L4_CONN|CO_FL_WAIT_L6_CONN))) {