]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: connections: Wake the upper layer even if sending/receiving is disabled.
authorOlivier Houchard <ohouchard@haproxy.com>
Wed, 5 Jun 2019 15:07:45 +0000 (17:07 +0200)
committerOlivier Houchard <cognet@ci0.org>
Wed, 5 Jun 2019 16:03:38 +0000 (18:03 +0200)
In conn_fd_handler(), if the fd is ready to send/recv, wake the upper layer
even if we have CO_FL_ERROR, or if CO_FL_XPRT_RD_ENA/CO_FL_XPRT_WR_ENA isn't
set. The only reason we should reach that point is if we had a shutw/shutr,
and the upper layer may want to know about it, and is supposed to handle it
anyway.

src/connection.c

index 361f2ee6e34d9aa9cb938c6660feb88572d2ffa3..bb0c3b31a41406d4b80d02ed537cbf2e56e709ff 100644 (file)
@@ -111,8 +111,7 @@ void conn_fd_handler(int fd)
        if (conn->xprt_done_cb && conn->xprt_done_cb(conn) < 0)
                return;
 
-       if (conn->xprt && fd_send_ready(fd) &&
-           ((conn->flags & (CO_FL_XPRT_WR_ENA|CO_FL_ERROR|CO_FL_HANDSHAKE)) == CO_FL_XPRT_WR_ENA)) {
+       if (conn->xprt && fd_send_ready(fd)) {
                /* force reporting of activity by clearing the previous flags :
                 * we'll have at least ERROR or CONNECTED at the end of an I/O,
                 * both of which will be detected below.
@@ -131,8 +130,7 @@ void conn_fd_handler(int fd)
         * that we must absolutely test conn->xprt at each step in case it suddenly
         * changes due to a quick unexpected close().
         */
-       if (conn->xprt && fd_recv_ready(fd) &&
-           ((conn->flags & (CO_FL_XPRT_RD_ENA|CO_FL_WAIT_ROOM|CO_FL_ERROR|CO_FL_HANDSHAKE)) == CO_FL_XPRT_RD_ENA)) {
+       if (conn->xprt && fd_recv_ready(fd)) {
                /* force reporting of activity by clearing the previous flags :
                 * we'll have at least ERROR or CONNECTED at the end of an I/O,
                 * both of which will be detected below.