void AsioContext::exit(context_idx_t ctx_idx) { assert(AsioSession::Get()->getContext(ctx_idx) == this); exitContextVector(ctx_idx, m_runnableQueue); exitContextVector(ctx_idx, m_fastRunnableQueue); for (auto& it : m_priorityQueueDefault) { exitContextQueue(ctx_idx, it.second); } for (auto& it : m_priorityQueueNoPendingIO) { exitContextQueue(ctx_idx, it.second); } exitContextVector(ctx_idx, m_sleepEvents); exitContextVector(ctx_idx, m_externalThreadEvents); }
void AsioContext::exit(context_idx_t ctx_idx) { assert(AsioSession::Get()->getContext(ctx_idx) == this); assert(!m_current); exitContextQueue(ctx_idx, m_runnableQueue); for (auto it : m_priorityQueueDefault) { exitContextQueue(ctx_idx, it.second); } for (auto it : m_priorityQueueNoPendingIO) { exitContextQueue(ctx_idx, it.second); } while (!m_externalThreadEvents.empty()) { auto ete_wh = m_externalThreadEvents.back(); m_externalThreadEvents.pop_back(); ete_wh->exitContext(ctx_idx); } }