From: Willy Tarreau Date: Fri, 5 Oct 2012 19:29:37 +0000 (+0200) Subject: BUG: connection: fix regression from commit 9e272bf9 X-Git-Tag: v1.5-dev13~191 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3b5bc665542aa504a691c662ecd548dc5bd54b4e;p=thirdparty%2Fhaproxy.git BUG: connection: fix regression from commit 9e272bf9 Commit 9e272bf9 broke connection setup in TCP mode, the comment was misleading and obviously wrong, as after a connection is established, we *do* have none of the CONNECT* flags. However we can never have them all at the same time, so let's use this to trigger a detection. --- diff --git a/src/connection.c b/src/connection.c index b7282255bf..732a7eaac3 100644 --- a/src/connection.c +++ b/src/connection.c @@ -86,19 +86,19 @@ int conn_fd_handler(int fd) /* The data transfer starts here and stops on error and handshakes */ if ((fdtab[fd].ev & (FD_POLL_IN | FD_POLL_HUP | FD_POLL_ERR)) && !(conn->flags & (CO_FL_WAIT_RD|CO_FL_WAIT_ROOM|CO_FL_ERROR|CO_FL_HANDSHAKE))) { - /* force detection of a flag change : if any I/O succeeds, we're - * forced to have at least one of the CONN_* flags in conn->flags. + /* force detection of a flag change : it's impossible to have both + * CONNECTED and WAIT_CONN so we're certain to trigger a change. */ - flags = 0; + flags = CO_FL_WAIT_L4_CONN | CO_FL_CONNECTED; conn->data->recv(conn); } if ((fdtab[fd].ev & (FD_POLL_OUT | FD_POLL_ERR)) && !(conn->flags & (CO_FL_WAIT_WR|CO_FL_WAIT_DATA|CO_FL_ERROR|CO_FL_HANDSHAKE))) { - /* force detection of a flag change : if any I/O succeeds, we're - * forced to have at least one of the CONN_* flags in conn->flags. + /* force detection of a flag change : it's impossible to have both + * CONNECTED and WAIT_CONN so we're certain to trigger a change. */ - flags = 0; + flags = CO_FL_WAIT_L4_CONN | CO_FL_CONNECTED; conn->data->send(conn); }