diff options
Diffstat (limited to 'indra')
-rw-r--r-- | indra/llmessage/llcoproceduremanager.cpp | 109 |
1 files changed, 7 insertions, 102 deletions
diff --git a/indra/llmessage/llcoproceduremanager.cpp b/indra/llmessage/llcoproceduremanager.cpp index bc7c982756..89eb00a2b7 100644 --- a/indra/llmessage/llcoproceduremanager.cpp +++ b/indra/llmessage/llcoproceduremanager.cpp @@ -67,18 +67,6 @@ public: /// @return This method returns a UUID that can be used later to cancel execution. LLUUID enqueueCoprocedure(const std::string &name, CoProcedure_t proc); - /// Cancel a coprocedure. If the coprocedure is already being actively executed - /// this method calls cancelSuspendedOperation() on the associated HttpAdapter - /// If it has not yet been dequeued it is simply removed from the queue. - //bool cancelCoprocedure(const LLUUID &id); - -// /// Returns the number of coprocedures in the queue awaiting processing. -// /// -// inline size_t countPending() const -// { -// return mPendingCoprocs.size(); -// } - /// Returns the number of coprocedures actively being processed. /// inline size_t countActive() const @@ -86,13 +74,6 @@ public: return mActiveCoprocs.size(); } -// /// Returns the total number of coprocedures either queued or in active processing. -// /// -// inline size_t count() const -// { -// return countPending() + countActive(); -// } - void close(); private: @@ -111,8 +92,9 @@ private: CoProcedure_t mProc; }; - // we use a deque here rather than std::queue since we want to be able to - // iterate through the queue and potentially erase an entry from the middle. + // we use a buffered_channel here rather than unbuffered_channel since we want to be able to + // push values without blocking,even if there's currently no one calling a pop operation (due to + // fibber running right now) typedef boost::fibers::buffered_channel<QueuedCoproc::ptr_t> CoprocQueue_t; typedef std::map<LLUUID, LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t> ActiveCoproc_t; @@ -120,7 +102,6 @@ private: size_t mPoolSize; CoprocQueue_t mPendingCoprocs; ActiveCoproc_t mActiveCoprocs; - //bool mShutdown; typedef std::map<std::string, LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t> CoroAdapterMap_t; LLCore::HttpRequest::policy_t mHTTPPolicy; @@ -128,7 +109,6 @@ private: CoroAdapterMap_t mCoroMapping; void coprocedureInvokerCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter); - }; //========================================================================= @@ -193,44 +173,12 @@ LLUUID LLCoprocedureManager::enqueueCoprocedure(const std::string &pool, const s return targetPool->enqueueCoprocedure(name, proc); } -//void LLCoprocedureManager::cancelCoprocedure(const LLUUID &id) -//{ -// for (poolMap_t::const_iterator it = mPoolMap.begin(); it != mPoolMap.end(); ++it) -// { -// if (it->second->cancelCoprocedure(id)) -// { -// return; -// } -// } -// LL_INFOS() << "Coprocedure not found." << LL_ENDL; -//} - void LLCoprocedureManager::setPropertyMethods(SettingQuery_t queryfn, SettingUpdate_t updatefn) { mPropertyQueryFn = queryfn; mPropertyDefineFn = updatefn; } -////------------------------------------------------------------------------- -//size_t LLCoprocedureManager::countPending() const -//{ -// size_t count = 0; -// for (poolMap_t::const_iterator it = mPoolMap.begin(); it != mPoolMap.end(); ++it) -// { -// count += (*it).second->countPending(); -// } -// return count; -//} -// -//size_t LLCoprocedureManager::countPending(const std::string &pool) const -//{ -// poolMap_t::const_iterator it = mPoolMap.find(pool); -// -// if (it == mPoolMap.end()) -// return 0; -// return (*it).second->countPending(); -//} - size_t LLCoprocedureManager::countActive() const { size_t count = 0; @@ -252,25 +200,6 @@ size_t LLCoprocedureManager::countActive(const std::string &pool) const return it->second->countActive(); } -//size_t LLCoprocedureManager::count() const -//{ -// size_t count = 0; -// for (poolMap_t::const_iterator it = mPoolMap.begin(); it != mPoolMap.end(); ++it) -// { -// count += (*it).second->count(); -// } -// return count; -//} -// -//size_t LLCoprocedureManager::count(const std::string &pool) const -//{ -// poolMap_t::const_iterator it = mPoolMap.find(pool); -// -// if (it == mPoolMap.end()) -// return 0; -// return (*it).second->count(); -//} - void LLCoprocedureManager::close(const std::string &pool) { poolMap_t::iterator it = mPoolMap.find(pool); @@ -285,7 +214,6 @@ LLCoprocedurePool::LLCoprocedurePool(const std::string &poolName, size_t size): mPoolName(poolName), mPoolSize(size), mPendingCoprocs(DEFAULT_QUEUE_SIZE), - //mShutdown(false), mCoroMapping(), mHTTPPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID) { @@ -317,32 +245,6 @@ LLUUID LLCoprocedurePool::enqueueCoprocedure(const std::string &name, LLCoproced return id; } -//bool LLCoprocedurePool::cancelCoprocedure(const LLUUID &id) -//{ -// // first check the active coroutines. If there, remove it and return. -// ActiveCoproc_t::iterator itActive = mActiveCoprocs.find(id); -// if (itActive != mActiveCoprocs.end()) -// { -// LL_INFOS() << "Found and canceling active coprocedure with id=" << id.asString() << " in pool \"" << mPoolName << "\"" << LL_ENDL; -// (*itActive).second->cancelSuspendedOperation(); -// mActiveCoprocs.erase(itActive); -// return true; -// } -// -//// for (auto it: mPendingCoprocs) -//// { -//// if ((*it)->mId == id) -//// { -//// LL_INFOS() << "Found and removing queued coroutine(" << (*it)->mName << ") with Id=" << id.asString() << " in pool \"" << mPoolName << "\"" << LL_ENDL; -//// mPendingCoprocs.erase(it); -//// return true; -//// } -//// } -// -// LL_INFOS() << "Coprocedure with Id=" << id.asString() << " was not found in pool \"" << mPoolName << "\"" << LL_ENDL; -// return false; -//} - //------------------------------------------------------------------------- void LLCoprocedurePool::coprocedureInvokerCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter) { @@ -358,6 +260,7 @@ void LLCoprocedurePool::coprocedureInvokerCoro(LLCoreHttpUtil::HttpCoroutineAdap ActiveCoproc_t::iterator itActive = mActiveCoprocs.insert(ActiveCoproc_t::value_type(coproc->mId, httpAdapter)).first; + // Nicky: This is super spammy. Consider using LL_DEBUGS here? LL_INFOS() << "Dequeued and invoking coprocedure(" << coproc->mName << ") with id=" << coproc->mId.asString() << " in pool \"" << mPoolName << "\"" << LL_ENDL; try @@ -374,12 +277,14 @@ void LLCoprocedurePool::coprocedureInvokerCoro(LLCoreHttpUtil::HttpCoroutineAdap throw; } + // Nicky: This is super spammy. Consider using LL_DEBUGS here? LL_INFOS() << "Finished coprocedure(" << coproc->mName << ")" << " in pool \"" << mPoolName << "\"" << LL_ENDL; mActiveCoprocs.erase(itActive); } } -void LLCoprocedurePool::close() { +void LLCoprocedurePool::close() +{ mPendingCoprocs.close(); } |