From: Olivier Houchard Date: Wed, 5 Jun 2019 15:07:45 +0000 (+0200) Subject: MEDIUM: connections: Wake the upper layer even if sending/receiving is disabled. X-Git-Tag: v2.0-dev6~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c3df4507fa;p=thirdparty%2Fhaproxy.git MEDIUM: connections: Wake the upper layer even if sending/receiving is disabled. 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. --- diff --git a/src/connection.c b/src/connection.c index 361f2ee6e3..bb0c3b31a4 100644 --- a/src/connection.c +++ b/src/connection.c @@ -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.