summaryrefslogtreecommitdiff
path: root/indra/llmessage/llcoproceduremanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llmessage/llcoproceduremanager.cpp')
-rw-r--r--indra/llmessage/llcoproceduremanager.cpp29
1 files changed, 23 insertions, 6 deletions
diff --git a/indra/llmessage/llcoproceduremanager.cpp b/indra/llmessage/llcoproceduremanager.cpp
index 4d76dacdf7..be014e7b1e 100644
--- a/indra/llmessage/llcoproceduremanager.cpp
+++ b/indra/llmessage/llcoproceduremanager.cpp
@@ -138,13 +138,24 @@ LLCoprocedureManager::~LLCoprocedureManager()
close();
}
-LLCoprocedureManager::poolPtr_t LLCoprocedureManager::initializePool(const std::string &poolName)
+void LLCoprocedureManager::initializePool(const std::string &poolName)
{
+ poolMap_t::iterator it = mPoolMap.find(poolName);
+
+ if (it != mPoolMap.end())
+ {
+ // Pools are not supposed to be initialized twice
+ // Todo: ideally restrict init to STATE_FIRST
+ LL_ERRS() << "Pool is already present " << poolName << LL_ENDL;
+ return;
+ }
+
// Attempt to look up a pool size in the configuration. If found use that
std::string keyName = "PoolSize" + poolName;
int size = 0;
LL_ERRS_IF(poolName.empty(), "CoprocedureManager") << "Poolname must not be empty" << LL_ENDL;
+ LL_INFOS("CoprocedureManager") << "Initializing pool " << poolName << LL_ENDL;
if (mPropertyQueryFn)
{
@@ -171,8 +182,6 @@ LLCoprocedureManager::poolPtr_t LLCoprocedureManager::initializePool(const std::
bool inserted = mPoolMap.emplace(poolName, pool).second;
LL_ERRS_IF(!inserted, "CoprocedureManager") << "Unable to add pool named \"" << poolName << "\" to map. FATAL!" << LL_ENDL;
-
- return pool;
}
//-------------------------------------------------------------------------
@@ -182,20 +191,28 @@ LLUUID LLCoprocedureManager::enqueueCoprocedure(const std::string &pool, const s
// not exist, create it.
poolMap_t::iterator it = mPoolMap.find(pool);
- poolPtr_t targetPool = (it != mPoolMap.end()) ? it->second : initializePool(pool);
+ if (it == mPoolMap.end())
+ {
+ // initializing pools in enqueueCoprocedure is not thread safe,
+ // at the moment pools need to be initialized manually
+ LL_ERRS() << "Uninitialized pool " << pool << LL_ENDL;
+ }
+ poolPtr_t targetPool = it->second;
return targetPool->enqueueCoprocedure(name, proc);
}
void LLCoprocedureManager::setPropertyMethods(SettingQuery_t queryfn, SettingUpdate_t updatefn)
{
// functions to discover and store the pool sizes
+ // Might be a better idea to make an initializePool(name, size) to init everything externally
mPropertyQueryFn = queryfn;
mPropertyDefineFn = updatefn;
- // workaround until we get mutex into initializePool
- initializePool("AssetStorage");
initializePool("Upload");
+ initializePool("AIS"); // it might be better to have some kind of on-demand initialization for AIS
+ // "ExpCache" pool gets initialized in LLExperienceCache
+ // asset storage pool gets initialized in LLViewerAssetStorage
}
//-------------------------------------------------------------------------