CLEANUP: quic: Remove a useless check in qc_lstnr_pkt_rcv()
This function parses the QUIC packet from a UDP datagram. It was originally
supposed to be run by several thread. Here we remove a section of code
where the current thread checks there is not another thread which has already
inserted the new quic_conn it is trying to insert in the connections tree.
Must be backported to 2.6 to ease the future backports to come.
diff --git a/src/xprt_quic.c b/src/xprt_quic.c
index 2dbb4cb..ffa2cba 100644
--- a/src/xprt_quic.c
+++ b/src/xprt_quic.c
@@ -5785,7 +5785,7 @@
struct quic_dgram *dgram, struct list **tasklist_head)
{
unsigned char *beg, *payload;
- struct quic_conn *qc, *qc_to_purge = NULL;
+ struct quic_conn *qc;
struct listener *l;
struct proxy *prx;
struct quic_counters *prx_counters;
@@ -5976,7 +5976,6 @@
}
if (!qc) {
int ipv4;
- struct ebmb_node *n = NULL;
if (pkt->type != QUIC_PACKET_TYPE_INITIAL) {
TRACE_PROTO("Non Initial packet", QUIC_EV_CONN_LPKT, NULL, NULL, NULL, qv);
@@ -6019,31 +6018,11 @@
HA_ATOMIC_INC(&prx_counters->half_open_conn);
/* Insert the DCID the QUIC client has chosen (only for listeners) */
- n = ebmb_insert(&quic_dghdlrs[tid].odcids, &qc->odcid_node,
- qc->odcid.len + qc->odcid.addrlen);
-
- /* If the insertion failed, it means that another
- * thread has already allocated a QUIC connection for
- * the same CID. Liberate our allocated connection.
- */
- if (unlikely(n != &qc->odcid_node)) {
- qc_to_purge = qc;
-
- qc = ebmb_entry(n, struct quic_conn, odcid_node);
- pkt->qc = qc;
- }
-
- if (likely(!qc_to_purge)) {
- /* Enqueue this packet. */
- pkt->qc = qc;
- }
- else {
- quic_conn_release(qc_to_purge);
- }
+ ebmb_insert(&quic_dghdlrs[tid].odcids, &qc->odcid_node,
+ qc->odcid.len + qc->odcid.addrlen);
}
- else {
- pkt->qc = qc;
- }
+
+ pkt->qc = qc;
}
else {
TRACE_PROTO("short header packet received", QUIC_EV_CONN_LPKT, qc);