MINOR: quic: Iterate over all received datagrams

Make the listener datagram handler iterate over all received datagrams
This commit is contained in:
Frédéric Lécaille 2022-01-28 15:38:52 +01:00 committed by Amaury Denoyelle
parent 1712b1df59
commit df1c7c78c1

View File

@ -5368,37 +5368,39 @@ struct task *quic_lstnr_dghdlr(struct task *t, void *ctx, unsigned int state)
struct quic_dgram *dgram; struct quic_dgram *dgram;
int first_pkt = 1; int first_pkt = 1;
dgram = MT_LIST_POP(&dghdlr->dgrams, typeof(dgram), mt_list); while ((dgram = MT_LIST_POP(&dghdlr->dgrams, typeof(dgram), mt_list))) {
if (!dgram) if (!dgram)
goto err;
pos = dgram->buf;
end = pos + dgram->len;
do {
int ret;
struct quic_rx_packet *pkt;
pkt = pool_zalloc(pool_head_quic_rx_packet);
if (!pkt)
goto err; goto err;
quic_rx_packet_refinc(pkt); pos = dgram->buf;
ret = qc_lstnr_pkt_rcv(pos, end, pkt, first_pkt, dgram); end = pos + dgram->len;
first_pkt = 0; do {
pos += pkt->len; int ret;
quic_rx_packet_refdec(pkt); struct quic_rx_packet *pkt;
if (ret == -1)
/* If the packet length could not be found, we cannot continue. */
break;
} while (pos < end);
/* Mark this datagram as consumed */
HA_ATOMIC_STORE(&dgram->buf, NULL);
/* Increasing the received bytes counter by the UDP datagram length pkt = pool_zalloc(pool_head_quic_rx_packet);
* if this datagram could be associated to a connection. if (!pkt)
*/ goto err;
if (dgram->qc)
dgram->qc->rx.bytes += dgram->len; quic_rx_packet_refinc(pkt);
ret = qc_lstnr_pkt_rcv(pos, end, pkt, first_pkt, dgram);
first_pkt = 0;
pos += pkt->len;
quic_rx_packet_refdec(pkt);
if (ret == -1)
/* If the packet length could not be found, we cannot continue. */
break;
} while (pos < end);
/* Mark this datagram as consumed */
HA_ATOMIC_STORE(&dgram->buf, NULL);
/* Increasing the received bytes counter by the UDP datagram length
* if this datagram could be associated to a connection.
*/
if (dgram->qc)
dgram->qc->rx.bytes += dgram->len;
}
return t; return t;