mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-11-16 16:31:26 +01:00
MINOR: quic: notify on send ready
This patch completes the previous one with poller subscribe of quic-conn owned socket on sendto() error. This ensures that mux-quic is notified if waiting on sending when a transient sendto() error is cleared. As such, qc_notify_send() is called directly inside socket I/O callback. qc_notify_send() internal condition have been thus completed. This will prevent to notify upper layer until all sending condition are fulfilled: room in congestion window and no transient error on socket FD. This should be backported up to 2.7.
This commit is contained in:
parent
e1a0ee3cf6
commit
caa16549b8
@ -1603,8 +1603,13 @@ static int qc_send_frames(struct qcc *qcc, struct list *frms)
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!qc_send_mux(qcc->conn->handle.qc, frms))
|
if (!qc_send_mux(qcc->conn->handle.qc, frms)) {
|
||||||
|
/* TODO should subscribe only for a transient send error */
|
||||||
|
TRACE_DEVEL("error on send, subscribing", QMUX_EV_QCC_SEND, qcc->conn);
|
||||||
|
qcc->conn->xprt->subscribe(qcc->conn, qcc->conn->xprt_ctx,
|
||||||
|
SUB_RETRY_SEND, &qcc->wait_event);
|
||||||
goto err;
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
/* If there is frames left at this stage, transport layer is blocked.
|
/* If there is frames left at this stage, transport layer is blocked.
|
||||||
* Subscribe on it to retry later.
|
* Subscribe on it to retry later.
|
||||||
|
|||||||
@ -7809,7 +7809,8 @@ void qc_notify_close(struct quic_conn *qc)
|
|||||||
int qc_notify_send(struct quic_conn *qc)
|
int qc_notify_send(struct quic_conn *qc)
|
||||||
{
|
{
|
||||||
if (qc->subs && qc->subs->events & SUB_RETRY_SEND) {
|
if (qc->subs && qc->subs->events & SUB_RETRY_SEND) {
|
||||||
if (quic_path_prep_data(qc->path)) {
|
if (quic_path_prep_data(qc->path) &&
|
||||||
|
(!qc_test_fd(qc) || !fd_send_active(qc->fd))) {
|
||||||
tasklet_wakeup(qc->subs->tasklet);
|
tasklet_wakeup(qc->subs->tasklet);
|
||||||
qc->subs->events &= ~SUB_RETRY_SEND;
|
qc->subs->events &= ~SUB_RETRY_SEND;
|
||||||
if (!qc->subs->events)
|
if (!qc->subs->events)
|
||||||
|
|||||||
@ -496,6 +496,7 @@ static void quic_conn_sock_fd_iocb(int fd)
|
|||||||
TRACE_DEVEL("send ready", QUIC_EV_CONN_RCV, qc);
|
TRACE_DEVEL("send ready", QUIC_EV_CONN_RCV, qc);
|
||||||
fd_stop_send(fd);
|
fd_stop_send(fd);
|
||||||
tasklet_wakeup_after(NULL, qc->wait_event.tasklet);
|
tasklet_wakeup_after(NULL, qc->wait_event.tasklet);
|
||||||
|
qc_notify_send(qc);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fd_recv_ready(fd)) {
|
if (fd_recv_ready(fd)) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user