MINOR: quic: Make qc_build_hdshk_pkt() atomically consume a packet number

Atomically increase the "next packet variable" before building a new packet.
Make the code bug on a packet building failure. This should never happen
if we do not want to consume a packet number for nothing. There are remaining
modifications to come to ensure this is the case.
This commit is contained in:
Frédéric Lécaille 2021-08-03 16:50:14 +02:00 committed by Amaury Denoyelle
parent 91ae7aa7ec
commit a7348f6f85

View File

@ -3918,11 +3918,10 @@ static struct quic_tx_packet *qc_build_hdshk_pkt(unsigned char **pos,
beg = *pos; beg = *pos;
pn_len = 0; pn_len = 0;
buf_pn = NULL; buf_pn = NULL;
pn = qel->pktns->tx.next_pn + 1; /* Consume a packet number. */
if (!qc_do_build_hdshk_pkt(*pos, buf_end, pkt, pkt_type, pn, &pn_len, &buf_pn, qel, qc)) { pn = HA_ATOMIC_ADD_FETCH(&qel->pktns->tx.next_pn, 1);
*err = -1; if (!qc_do_build_hdshk_pkt(*pos, buf_end, pkt, pkt_type, pn, &pn_len, &buf_pn, qel, qc))
goto err; BUG_ON(0);
}
end = beg + pkt->len; end = beg + pkt->len;
payload = buf_pn + pn_len; payload = buf_pn + pn_len;
@ -3946,10 +3945,8 @@ static struct quic_tx_packet *qc_build_hdshk_pkt(unsigned char **pos,
/* Now that a correct packet is built, let us consume <*pos> buffer. */ /* Now that a correct packet is built, let us consume <*pos> buffer. */
*pos = end; *pos = end;
/* Consume a packet number. */
++qel->pktns->tx.next_pn;
/* Attach the built packet to its tree. */ /* Attach the built packet to its tree. */
pkt->pn_node.key = qel->pktns->tx.next_pn; pkt->pn_node.key = pn;
/* Set the packet in fligth length for in flight packet only. */ /* Set the packet in fligth length for in flight packet only. */
if (pkt->flags & QUIC_FL_TX_PACKET_IN_FLIGHT) { if (pkt->flags & QUIC_FL_TX_PACKET_IN_FLIGHT) {
pkt->in_flight_len = pkt->len; pkt->in_flight_len = pkt->len;