]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
CLEANUP: quic: Remove a useless check in qc_lstnr_pkt_rcv()
authorFrédéric Lécaille <flecaille@haproxy.com>
Wed, 24 Aug 2022 16:59:23 +0000 (18:59 +0200)
committerFrédéric Lécaille <flecaille@haproxy.com>
Wed, 24 Aug 2022 16:59:23 +0000 (18:59 +0200)
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.

src/xprt_quic.c

index 2dbb4cba077e3eba18664b8e59b7108a9341c92b..ffa2cba1facf540c522c0bb368e007cd165d7cec 100644 (file)
@@ -5785,7 +5785,7 @@ static void qc_lstnr_pkt_rcv(unsigned char *buf, const unsigned char *end,
                              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 @@ static void qc_lstnr_pkt_rcv(unsigned char *buf, const unsigned char *end,
                }
                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 @@ static void qc_lstnr_pkt_rcv(unsigned char *buf, const unsigned char *end,
 
                        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);
-                       }
-               }
-               else {
-                       pkt->qc = qc;
+                       ebmb_insert(&quic_dghdlrs[tid].odcids, &qc->odcid_node,
+                                   qc->odcid.len + qc->odcid.addrlen);
                }
+
+               pkt->qc = qc;
        }
        else {
                TRACE_PROTO("short header packet received", QUIC_EV_CONN_LPKT, qc);