From c3df4507fa9219dceb345663cc3f9975b5470dfc Mon Sep 17 00:00:00 2001 From: Olivier Houchard Date: Wed, 5 Jun 2019 17:07:45 +0200 Subject: [PATCH] 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. --- src/connection.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) 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. -- 2.39.5