From 47e9a1ad4ef1b17090d6fd122e8162ac3a2be634 Mon Sep 17 00:00:00 2001 From: Olivier Houchard Date: Wed, 7 Nov 2018 17:55:19 +0100 Subject: [PATCH] MEDIUM: connections: Wait until the connection is established to try to recv. Instead of trying to receive as soon as the connection is created, and to eventually have to transfer subscription if we move connections, wait until the connection is established before attempting to recv. --- src/backend.c | 9 +-------- src/stream.c | 6 ++++++ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/backend.c b/src/backend.c index 4d75df6fe..d40202885 100644 --- a/src/backend.c +++ b/src/backend.c @@ -1061,16 +1061,12 @@ int connect_server(struct stream *s) struct server *srv; int reuse = 0; int err; - void *send_wait = NULL, *recv_wait = NULL; srv = objt_server(s->target); srv_cs = objt_cs(s->si[1].end); srv_conn = cs_conn(srv_cs); - if (srv_conn) { + if (srv_conn) reuse = s->target == srv_conn->target; - send_wait = srv_conn->send_wait; - recv_wait = srv_conn->recv_wait; - } if (srv && !reuse) { old_cs = srv_cs; @@ -1171,9 +1167,6 @@ int connect_server(struct stream *s) if (!srv_cs) return SF_ERR_RESOURCE; - srv_conn->send_wait = send_wait; - srv_conn->recv_wait = recv_wait; - if (!(s->flags & SF_ADDR_SET)) { err = assign_server_address(s); if (err != SRV_STATUS_OK) diff --git a/src/stream.c b/src/stream.c index f4473e86d..7b601ac44 100644 --- a/src/stream.c +++ b/src/stream.c @@ -862,6 +862,12 @@ static void sess_establish(struct stream *s) /* real connections have timeouts */ req->wto = s->be->timeout.server; rep->rto = s->be->timeout.server; + /* The connection is now established, try to read data from the + * underlying layer, and subscribe to recv events. We use a + * delayed recv here to give a chance to the data to flow back + * by the time we process other tasks. + */ + si_chk_rcv(si); } req->wex = TICK_ETERNITY; }