void ServiceContext::OperationContextDeleter::operator()(OperationContext* opCtx) const { auto client = opCtx->getClient(); auto service = client->getServiceContext(); { stdx::lock_guard<Client> lk(*client); client->resetOperationContext(); } onDestroy(opCtx, service->_clientObservers); delete opCtx; }
void ServiceContext::OperationContextDeleter::operator()(OperationContext* opCtx) const { auto client = opCtx->getClient(); auto service = client->getServiceContext(); { stdx::lock_guard<Client> lk(*client); client->resetOperationContext(); } try { for (const auto& observer : service->_clientObservers) { observer->onDestroyOperationContext(opCtx); } } catch (...) { std::terminate(); } delete opCtx; }