*/
static void qcs_free(struct qcs *qcs)
{
- TRACE_ENTER(QMUX_EV_QCS_END, qcs->qcc->conn, qcs);
+ struct qcc *qcc = qcs->qcc;
+
+ TRACE_ENTER(QMUX_EV_QCS_END, qcc->conn, qcs);
qc_free_ncbuf(qcs, &qcs->rx.ncbuf);
b_free(&qcs->tx.buf);
- BUG_ON(!qcs->qcc->strms[qcs_id_type(qcs->id)].nb_streams);
- --qcs->qcc->strms[qcs_id_type(qcs->id)].nb_streams;
+ BUG_ON(!qcc->strms[qcs_id_type(qcs->id)].nb_streams);
+ --qcc->strms[qcs_id_type(qcs->id)].nb_streams;
- if (qcs->ctx && qcs->qcc->app_ops->detach)
- qcs->qcc->app_ops->detach(qcs);
+ if (qcs->ctx && qcc->app_ops->detach)
+ qcc->app_ops->detach(qcs);
qc_stream_desc_release(qcs->stream);
eb64_delete(&qcs->by_id);
pool_free(pool_head_qcs, qcs);
- TRACE_LEAVE(QMUX_EV_QCS_END);
+ TRACE_LEAVE(QMUX_EV_QCS_END, qcc->conn);
}
static forceinline struct stconn *qcs_sc(const struct qcs *qcs)
goto err;
}
- TRACE_LEAVE(QMUX_EV_QCC_SEND);
+ TRACE_LEAVE(QMUX_EV_QCC_SEND, qcc->conn);
return 0;
err:
- TRACE_LEAVE(QMUX_EV_QCC_SEND);
+ TRACE_LEAVE(QMUX_EV_QCC_SEND, qcc->conn);
return 1;
}
struct eb64_node *node;
int release = 0;
- TRACE_ENTER(QMUX_EV_QCC_WAKE);
+ TRACE_ENTER(QMUX_EV_QCC_WAKE, qcc->conn);
node = eb64_first(&qcc->streams_by_id);
while (node) {
}
}
- TRACE_LEAVE(QMUX_EV_QCC_WAKE);
+ TRACE_LEAVE(QMUX_EV_QCC_WAKE, qcc->conn);
return release;
}
struct connection *conn = qcc->conn;
struct eb64_node *node;
- TRACE_ENTER(QMUX_EV_QCC_END);
+ TRACE_ENTER(QMUX_EV_QCC_END, conn);
if (qcc->app_ops && qcc->app_ops->release) {
/* Application protocol with dedicated connection closing
else {
qcc_emit_cc_app(qcc, QC_ERR_NO_ERROR, 0);
}
- TRACE_PROTO("application layer released", QMUX_EV_QCC_END, qcc->conn);
+ TRACE_PROTO("application layer released", QMUX_EV_QCC_END, conn);
if (qcc->task) {
task_destroy(qcc->task);
{
struct qcc *qcc = ctx;
- TRACE_ENTER(QMUX_EV_QCC_WAKE);
+ TRACE_ENTER(QMUX_EV_QCC_WAKE, qcc->conn);
qc_send(qcc);
if (qc_purge_streams(qcc)) {
if (qcc_is_dead(qcc)) {
TRACE_STATE("releasing dead connection", QMUX_EV_QCC_WAKE, qcc->conn);
- qc_release(qcc);
- goto end;
+ goto release;
}
}
qcc_refresh_timeout(qcc);
end:
- TRACE_LEAVE(QMUX_EV_QCC_WAKE);
+ TRACE_LEAVE(QMUX_EV_QCC_WAKE, qcc->conn);
+ return NULL;
+ release:
+ qc_release(qcc);
+ TRACE_LEAVE(QMUX_EV_QCC_WAKE);
return NULL;
}