From 61ace1b2ca51729270bd980984a2c67293bc2a2f Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Mon, 23 Jul 2012 12:14:26 +0200 Subject: [PATCH] MEDIUM: connection: remove the FD_POLL_* flags only once It's inappropriate to remove FD_POLL_IN and FD_POLL_OUT in the IO callback handlers, first because they shouldn't care about this, and second because it will make it harder to chain multiple callers. So let's flush these flags only once for all in the connection handler. Right now, the HUP and ERR flags are still flushed in each IO handler to avoid multiple calls. This will probably have to be fixed later. --- src/connection.c | 2 ++ src/sock_raw.c | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/connection.c b/src/connection.c index 696525d3e..089ad8925 100644 --- a/src/connection.c +++ b/src/connection.c @@ -42,5 +42,7 @@ int conn_fd_handler(int fd) if (!conn->data->write(fd)) ret |= FD_WAIT_WRITE; + /* remove the events before leaving */ + fdtab[fd].ev &= ~(FD_POLL_IN | FD_POLL_OUT | FD_POLL_HUP | FD_POLL_ERR); return ret; } diff --git a/src/sock_raw.c b/src/sock_raw.c index 90081aa33..ac0dbcde2 100644 --- a/src/sock_raw.c +++ b/src/sock_raw.c @@ -484,7 +484,6 @@ static int sock_raw_read(int fd) if (b->flags & BF_READ_ACTIVITY) b->flags &= ~BF_READ_DONTWAIT; - fdtab[fd].ev &= ~FD_POLL_IN; return retval; out_shutdown_r: @@ -741,7 +740,6 @@ static int sock_raw_write(int fd) task_wakeup(si->owner, TASK_WOKEN_IO); } - fdtab[fd].ev &= ~FD_POLL_OUT; return retval; out_error: