if (qcc_is_pacing_active(qcc->conn)) {
if (!LIST_ISEMPTY(frms) && !quic_pacing_expired(&qcc->tx.pacer)) {
- tasklet_wakeup(qcc->wait_event.tasklet);
+ tasklet_wakeup(qcc->wait_event.tasklet, TASK_F_UEVT1);
total = 0;
goto out;
}
if (ret == 1) {
/* qcc_send_frames cannot return 1 if pacing not used. */
BUG_ON(!qcc_is_pacing_active(qcc->conn));
- tasklet_wakeup(qcc->wait_event.tasklet);
+ tasklet_wakeup(qcc->wait_event.tasklet, TASK_F_UEVT1);
++qcc->tx.paced_sent_ctr;
}
{
struct qcc *qcc = ctx;
+ /* Check if woken up only for pacing but not yet expired. */
+ if ((status & (TASK_F_UEVT1|TASK_WOKEN_ANY)) == TASK_F_UEVT1 &&
+ !quic_pacing_expired(&qcc->tx.pacer)) {
+ /* hide any trace as no progress should be performed on this invokation. */
+ trace_disable();
+ }
+
TRACE_ENTER(QMUX_EV_QCC_WAKE, qcc->conn);
if (!(qcc->wait_event.events & SUB_RETRY_SEND))
qcc_refresh_timeout(qcc);
TRACE_LEAVE(QMUX_EV_QCC_WAKE, qcc->conn);
+ trace_resume();
+
return NULL;
release:
qcc_shutdown(qcc);
qcc_release(qcc);
+
TRACE_LEAVE(QMUX_EV_QCC_WAKE);
+ trace_resume();
+
return NULL;
}