From 320744b53d6d422346348c800f7f624cce8df93e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20L=C3=A9caille?= Date: Thu, 27 Jan 2022 12:19:28 +0100 Subject: [PATCH] MINOR: quic: Do not reset a full RX buffer As the RX buffer is not consumed by the sock i/o handler as soon as a datagram is produced, when full an RX buffer must not be reset. The remaining room is consumed without modifying it. The consumer has a represention of its contents: a list of datagrams. --- src/quic_sock.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/quic_sock.c b/src/quic_sock.c index 468cf64db..37e7f1b7c 100644 --- a/src/quic_sock.c +++ b/src/quic_sock.c @@ -173,7 +173,7 @@ void quic_sock_fd_iocb(int fd) struct quic_transport_params *params; /* Source address */ struct sockaddr_storage saddr = {0}; - size_t max_sz; + size_t max_sz, cspace; socklen_t saddrlen; struct quic_dgram *dgram, *dgramp, *new_dgram; @@ -207,9 +207,10 @@ void quic_sock_fd_iocb(int fd) params = &l->bind_conf->quic_params; max_sz = params->max_udp_payload_size; - if (b_contig_space(buf) < max_sz) { - /* Note that when we enter this function, is always empty */ - b_reset(buf); + cspace = b_contig_space(buf); + if (cspace < max_sz) { + /* Consume the remaining space */ + b_add(buf, cspace); if (b_contig_space(buf) < max_sz) goto out; }