void CollocatedRequestHandler::asyncRequestCanceled(const OutgoingAsyncBasePtr& outAsync, const LocalException& ex) { Lock sync(*this); map<OutgoingAsyncBasePtr, Int>::iterator p = _sendAsyncRequests.find(outAsync); if(p != _sendAsyncRequests.end()) { if(p->second > 0) { _asyncRequests.erase(p->second); } _sendAsyncRequests.erase(p); if(outAsync->exception(ex)) { outAsync->invokeExceptionAsync(); } _adapter->decDirectCount(); // invokeAll won't be called, decrease the direct count. return; } OutgoingAsyncPtr o = ICE_DYNAMIC_CAST(OutgoingAsync, outAsync); if(o) { for(map<Int, OutgoingAsyncBasePtr>::iterator q = _asyncRequests.begin(); q != _asyncRequests.end(); ++q) { if(q->second.get() == o.get()) { _asyncRequests.erase(q); if(outAsync->exception(ex)) { outAsync->invokeExceptionAsync(); } return; } } } }
void CollocatedRequestHandler::asyncRequestCanceled(const OutgoingAsyncBasePtr& outAsync, const LocalException& ex) { Lock sync(*this); map<OutgoingAsyncBasePtr, Int>::iterator p = _sendAsyncRequests.find(outAsync); if(p != _sendAsyncRequests.end()) { if(p->second > 0) { _asyncRequests.erase(p->second); } _sendAsyncRequests.erase(p); if(outAsync->completed(ex)) { outAsync->invokeCompletedAsync(); } return; } OutgoingAsyncPtr o = OutgoingAsyncPtr::dynamicCast(outAsync); if(o) { for(map<Int, OutgoingAsyncBasePtr>::iterator q = _asyncRequests.begin(); q != _asyncRequests.end(); ++q) { if(q->second.get() == o.get()) { _asyncRequests.erase(q); if(outAsync->completed(ex)) { outAsync->invokeCompletedAsync(); } return; } } } }