mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-04-08 10:11:40 +00:00
MINOR: quic: skip sending if no frame to send in io-cb
Check on quic_conn_io_cb() if sending is required. This allows to skip over Tx buffer allocation if not needed. To implement this, we check if frame lists on current and next encryption level are empty. We also need to check if there is no need to send ACK, PROBE or CONNECTION_CLOSE. This has been isolated in a new function qc_need_sending() which may be reuse in some other functions in the future.
This commit is contained in:
parent
654269c769
commit
c09ef0c5fc
@ -3837,6 +3837,15 @@ out:
|
||||
return t;
|
||||
}
|
||||
|
||||
/* Returns a boolean if <qc> needs to emit frames for <qel> encryption level. */
|
||||
static int qc_need_sending(struct quic_conn *qc, struct quic_enc_level *qel)
|
||||
{
|
||||
return (qc->flags & QUIC_FL_CONN_IMMEDIATE_CLOSE) ||
|
||||
(qel->pktns->flags & QUIC_FL_PKTNS_ACK_REQUIRED) ||
|
||||
qel->pktns->tx.pto_probe ||
|
||||
!LIST_ISEMPTY(&qel->pktns->tx.frms);
|
||||
}
|
||||
|
||||
/* QUIC connection packet handler task. */
|
||||
struct task *quic_conn_io_cb(struct task *t, void *context, unsigned int state)
|
||||
{
|
||||
@ -3952,6 +3961,9 @@ struct task *quic_conn_io_cb(struct task *t, void *context, unsigned int state)
|
||||
if (!quic_get_tls_enc_levels(&tel, &next_tel, st, 0))
|
||||
goto err;
|
||||
|
||||
if (!qc_need_sending(qc, qel) && !qc_need_sending(qc, next_qel))
|
||||
goto skip_send;
|
||||
|
||||
buf = qc_txb_alloc(qc);
|
||||
if (!buf)
|
||||
goto err;
|
||||
|
Loading…
Reference in New Issue
Block a user