From: Frédéric Lécaille Date: Mon, 31 Jan 2022 09:16:18 +0000 (+0100) Subject: MINOR: quic: Initialize the connection timer asap X-Git-Tag: v2.6-dev1~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=789413caf04fbbf7093365b87e194668a61d7c39;p=thirdparty%2Fhaproxy.git MINOR: quic: Initialize the connection timer asap We must move this initialization from xprt_start() callback, which comes too late (after handshake completion for 1RTT session). This timer must be usable as soon as we have packets to send/receive. Let's initialize it after the TLS context is initialized in qc_conn_alloc_ssl_ctx(). This latter function initializes I/O handler task (quic_conn_io_cb) to send/receive packets. --- diff --git a/src/xprt_quic.c b/src/xprt_quic.c index 6537f04973..ef4464d04d 100644 --- a/src/xprt_quic.c +++ b/src/xprt_quic.c @@ -4361,6 +4361,9 @@ static ssize_t qc_lstnr_pkt_rcv(unsigned char *buf, const unsigned char *end, if (qc_conn_alloc_ssl_ctx(qc)) goto err; + if (!quic_conn_init_timer(qc)) + goto err; + /* NOTE: the socket address has been concatenated to the destination ID * chosen by the client for Initial packets. */ @@ -5317,11 +5320,6 @@ static int qc_xprt_start(struct connection *conn, void *ctx) struct ssl_sock_ctx *qctx = ctx; qc = conn->qc; - if (!quic_conn_init_timer(qc)) { - TRACE_PROTO("Non initialized timer", QUIC_EV_CONN_LPKT, qc); - return 0; - } - quic_mux_transport_params_update(qc->qcc); if (qcc_install_app_ops(qc->qcc, qc->app_ops)) { TRACE_PROTO("Cannot install app layer", QUIC_EV_CONN_LPKT, qc);