void Session::on_after_run() { for (IOWorkerVec::iterator it = io_workers_.begin(), end = io_workers_.end(); it != end; ++it) { (*it)->join(); } notify_closed(); }
static int close_handler(qd_container_t *container, void* conn_context, pn_connection_t *conn, qd_connection_t* qd_conn) { // // Close all links, passing QD_LOST as the reason. These links are not // being properly 'detached'. They are being orphaned. // pn_link_t *pn_link = pn_link_head(conn, 0); while (pn_link) { qd_link_t *link = (qd_link_t*) pn_link_get_context(pn_link); if (link) { qd_node_t *node = link->node; if (node) { node->ntype->link_detach_handler(node->context, link, QD_LOST); } } pn_link_close(pn_link); pn_link = pn_link_next(pn_link, 0); } // teardown all sessions pn_session_t *ssn = pn_session_head(conn, 0); while (ssn) { pn_session_close(ssn); ssn = pn_session_next(ssn, 0); } // close the connection pn_connection_close(conn); notify_closed(container, qd_conn, conn_context); return 0; }