]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: quic: Wrong RX buffer tail handling when no more contiguous data
authorFrédéric Lécaille <flecaille@haproxy.com>
Fri, 28 Jan 2022 12:10:24 +0000 (13:10 +0100)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Fri, 28 Jan 2022 15:08:07 +0000 (16:08 +0100)
The producer must know where is the tailing hole in the RX buffer
when it purges it from consumed datagram. This is done allocating
a fake datagram with the remaining number of bytes which cannot be produced
at the tail of the RX buffer as length.

src/quic_sock.c

index 37e7f1b7c0869aa73feac835507c8291fbaa74ba..5533b01d5ea31e83197c78634f9b146ad834bd10 100644 (file)
@@ -209,6 +209,17 @@ void quic_sock_fd_iocb(int fd)
        max_sz = params->max_udp_payload_size;
        cspace = b_contig_space(buf);
        if (cspace < max_sz) {
+               struct quic_dgram *dgram;
+
+               /* Allocate a fake datagram, without data to locate
+                * the end of the RX buffer (required during purging).
+                */
+               dgram = pool_zalloc(pool_head_quic_dgram);
+               if (!dgram)
+                       goto out;
+
+               dgram->len = cspace;
+               LIST_APPEND(&rxbuf->dgrams, &dgram->list);
                /* Consume the remaining space */
                b_add(buf, cspace);
                if (b_contig_space(buf) < max_sz)