MINOR: quic: Connection allocations rework

Allocate everything needed for a connection (struct quic_conn) from the same
function.
Rename qc_new_conn_init() to qc_new_conn() to reflect these modifications.
Insert these connection objects in their tree after returning from this function.
diff --git a/src/xprt_quic.c b/src/xprt_quic.c
index 8836cac..90ce0af 100644
--- a/src/xprt_quic.c
+++ b/src/xprt_quic.c
@@ -2574,19 +2574,6 @@
 	return 0;
 }
 
-/* Allocate a new QUIC connection and return it if succeeded, NULL if not. */
-struct quic_conn *new_quic_conn(uint32_t version)
-{
-	struct quic_conn *qc;
-
-	qc = pool_zalloc(pool_head_quic_conn);
-	if (qc) {
-		qc->version = version;
-	}
-
-	return qc;
-}
-
 /* Uninitialize <qel> QUIC encryption level. Never fails. */
 static void quic_conn_enc_level_uninit(struct quic_enc_level *qel)
 {
@@ -2709,6 +2696,9 @@
 {
 	int i;
 
+	if (!conn)
+		return;
+
 	free_quic_conn_cids(conn);
 	for (i = 0; i < QUIC_TLS_ENC_LEVEL_MAX; i++)
 		quic_conn_enc_level_uninit(&conn->els[i]);
@@ -2772,17 +2762,22 @@
  * <scid> is the source connection ID with <scid_len> as length.
  * Returns 1 if succeeded, 0 if not.
  */
-static int qc_new_conn_init(struct quic_conn *qc, int ipv4,
-                            struct eb_root *quic_initial_clients,
-                            struct eb_root *quic_clients,
-                            unsigned char *dcid, size_t dcid_len,
-                            unsigned char *scid, size_t scid_len, int server)
+static struct quic_conn *qc_new_conn(unsigned int version, int ipv4,
+                                    unsigned char *dcid, size_t dcid_len,
+                                    unsigned char *scid, size_t scid_len, int server)
 {
 	int i;
+	struct quic_conn *qc;
 	/* Initial CID. */
 	struct quic_connection_id *icid;
 
 	TRACE_ENTER(QUIC_EV_CONN_INIT);
+	qc = pool_zalloc(pool_head_quic_conn);
+	if (!qc) {
+		TRACE_PROTO("Could not allocate a new connection", QUIC_EV_CONN_INIT);
+		goto err;
+	}
+
 	qc->cids = EB_ROOT;
 	/* QUIC Server (or listener). */
 	if (server) {
@@ -2809,26 +2804,23 @@
 	qc->obuf.pos = qc->obuf.data;
 
 	icid = new_quic_cid(&qc->cids, 0);
-	if (!icid)
-		return 0;
+	if (!icid) {
+		TRACE_PROTO("Could not allocate a new connection ID", QUIC_EV_CONN_INIT);
+		goto err;
+	}
 
 	/* Select our SCID which is the first CID with 0 as sequence number. */
 	qc->scid = icid->cid;
 
-	/* Insert the DCID the QUIC client has chosen (only for listeners) */
-	if (server)
-		ebmb_insert(quic_initial_clients, &qc->odcid_node, qc->odcid.len);
-
-	/* Insert our SCID, the connection ID for the QUIC client. */
-	ebmb_insert(quic_clients, &qc->scid_node, qc->scid.len);
-
 	/* Packet number spaces initialization. */
 	for (i = 0; i < QUIC_TLS_PKTNS_MAX; i++)
 		quic_pktns_init(&qc->pktns[i]);
 	/* QUIC encryption level context initialization. */
 	for (i = 0; i < QUIC_TLS_ENC_LEVEL_MAX; i++) {
-		if (!quic_conn_enc_level_init(qc, i))
+		if (!quic_conn_enc_level_init(qc, i)) {
+			TRACE_PROTO("Could not initialize an encryption level", QUIC_EV_CONN_INIT);
 			goto err;
+		}
 		/* Initialize the packet number space. */
 		qc->els[i].pktns = &qc->pktns[quic_tls_pktns(i)];
 	}
@@ -2836,9 +2828,12 @@
 	/* TX part. */
 	LIST_INIT(&qc->tx.frms_to_send);
 	qc->tx.bufs = quic_conn_tx_bufs_alloc(QUIC_CONN_TX_BUFS_NB, QUIC_CONN_TX_BUF_SZ);
-	if (!qc->tx.bufs)
+	if (!qc->tx.bufs) {
+		TRACE_PROTO("Could not allocate TX bufs", QUIC_EV_CONN_INIT);
 		goto err;
+	}
 
+	qc->version = version;
 	qc->tx.nb_buf = QUIC_CONN_TX_BUFS_NB;
 	qc->tx.wbuf = qc->tx.rbuf = 0;
 	qc->tx.bytes = 0;
@@ -2852,12 +2847,12 @@
 
 	TRACE_LEAVE(QUIC_EV_CONN_INIT);
 
-	return 1;
+	return qc;
 
  err:
 	TRACE_DEVEL("leaving in error", QUIC_EV_CONN_INIT);
 	quic_conn_free(qc);
-	return 0;
+	return NULL;
 }
 
 /* Initialize the timer task of <qc> QUIC connection.
@@ -3260,23 +3255,22 @@
 				goto err;
 			}
 
-			qc = new_quic_conn(pkt->version);
-			if (!qc) {
-				TRACE_PROTO("Non allocated new connection", QUIC_EV_CONN_LPKT);
-				goto err;
-			}
-
 			pkt->saddr = *saddr;
 			/* Note that here, odcid_len equals to pkt->dcid.len minus the length
 			 * of <saddr>.
 			 */
 			pkt->odcid_len = dcid_len;
 			ipv4 = saddr->ss_family == AF_INET;
-			if (!qc_new_conn_init(qc, ipv4, &l->rx.odcids, &l->rx.cids,
-			                      pkt->dcid.data, pkt->dcid.len,
-			                      pkt->scid.data, pkt->scid.len, 1))
+			qc = qc_new_conn(pkt->version, ipv4, pkt->dcid.data, pkt->dcid.len,
+			                 pkt->scid.data, pkt->scid.len, 1);
+			if (qc == NULL)
 				goto err;
 
+			/* Insert the DCID the QUIC client has chosen (only for listeners) */
+			ebmb_insert(&l->rx.odcids, &qc->odcid_node, qc->odcid.len);
+			/* Insert our SCID, the connection ID for the QUIC client. */
+			ebmb_insert(&l->rx.cids, &qc->scid_node, qc->scid.len);
+
 			odcid = &qc->rx.params.original_destination_connection_id;
 			/* Copy the transport parameters. */
 			qc->rx.params = l->bind_conf->quic_params;
@@ -4362,17 +4356,17 @@
 		if (RAND_bytes(dcid, sizeof dcid) != 1)
 			goto err;
 
-		conn->qc = new_quic_conn(QUIC_PROTOCOL_VERSION_DRAFT_28);
-		if (!conn->qc)
-			goto err;
-
-		qc = conn->qc;
-		qc->conn = conn;
 		ipv4 = conn->dst->ss_family == AF_INET;
-		if (!qc_new_conn_init(qc, ipv4, NULL, &srv->cids,
-		                      dcid, sizeof dcid, NULL, 0, 0))
+		qc = qc_new_conn(QUIC_PROTOCOL_VERSION_DRAFT_28, ipv4,
+		                 dcid, sizeof dcid, NULL, 0, 0);
+		if (qc == NULL)
 			goto err;
 
+		/* Insert our SCID, the connection ID for the QUIC client. */
+		ebmb_insert(&srv->cids, &qc->scid_node, qc->scid.len);
+
+		conn->qc = qc;
+		qc->conn = conn;
 		if (!qc_new_isecs(qc, dcid, sizeof dcid, 0))
 			goto err;