static void tx_list_destroy(ib_conn_t *conn) { while (conn->tx_first != NULL) { tx_finish(conn->tx_first); ib_tx_destroy(conn->tx_first); } }
/** * Handle transaction context destroy. * * Handles TS_EVENT_HTTP_TXN_CLOSE (transaction close) close event from the * ATS. * * @param[in,out] ctx Transaction context */ static void tsib_txn_ctx_destroy(tsib_txn_ctx *txndata) { if (txndata == NULL) { return; } ib_tx_t *tx = txndata->tx; tsib_ssn_ctx *ssndata = txndata->ssn; assert(tx != NULL); assert(ssndata != NULL); txndata->tx = NULL; ib_log_debug_tx(tx, "TX DESTROY: conn=>%p tx_count=%zd tx=%p id=%s txn_count=%d", tx->conn, tx->conn->tx_count, tx, tx->id, ssndata->txn_count); tx_finish(tx); ib_lock_lock(ssndata->mutex); ib_tx_destroy(tx); txndata->ssn = NULL; /* Decrement the txn count on the ssn, and destroy ssn if it's closing. * We trust TS not to create more TXNs after signalling SSN close! */ if (ssndata->closing && ssndata->txn_count <= 1) { if (ssndata->iconn) { tx_list_destroy(ssndata->iconn); ib_conn_t *conn = ssndata->iconn; ib_engine_t *ib = conn->ib; ssndata->iconn = NULL; TSDebug("ironbee", "tsib_txn_ctx_destroy: calling ib_state_notify_conn_closed()"); ib_state_notify_conn_closed(ib, conn); TSDebug("ironbee", "CONN DESTROY: conn=%p", conn); ib_conn_destroy(conn); } TSContDataSet(ssndata->contp, NULL); TSContDestroy(ssndata->contp); ib_lock_unlock(ssndata->mutex); ib_lock_destroy_malloc(ssndata->mutex); TSfree(ssndata); } else { --(ssndata->txn_count); ib_lock_unlock(ssndata->mutex); } TSfree(txndata); }
void Transaction::destroy() const { ib_tx_destroy(ib()); }