]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: tcp: Make sure we keep the polling consistent in tcp_probe_connect.
authorOlivier Houchard <cognet@ci0.org>
Thu, 6 Jun 2019 16:15:01 +0000 (18:15 +0200)
committerOlivier Houchard <cognet@ci0.org>
Thu, 6 Jun 2019 16:17:32 +0000 (18:17 +0200)
In tcp_probe_connect(), if the connection is still pending, do not disable
want_recv, we don't have any business to do so, but explicitely use
__conn_xprt_want_send(), otherwise the next time we'll reach tcp_probe_connect,
fd_send_ready() would return 0 and we would never flag the connection as
CO_FL_CONNECTED, which can lead to various problems, such as check not
completing because they consider it is not connected yet.

src/proto_tcp.c

index c64e48cd5cfb47254142b20748302e0264d73bb1..51d10a553da234572083568923fd92571b0b8cda 100644 (file)
@@ -691,7 +691,7 @@ int tcp_connect_probe(struct connection *conn)
 
        if (connect(fd, (const struct sockaddr *)addr, get_addr_len(addr)) == -1) {
                if (errno == EALREADY || errno == EINPROGRESS) {
-                       __conn_xprt_stop_recv(conn);
+                       __conn_xprt_want_send(conn);
                        fd_cant_send(fd);
                        return 0;
                }