From f06ebd054bfbcf7e3b4c8deb097cbb5064b85366 Mon Sep 17 00:00:00 2001
From: Andrey Kleshchev <andreykproductengine@lindenlab.com>
Date: Sun, 14 Feb 2021 19:48:17 +0200
Subject: [PATCH] SL-14807 Missed a pool init in unused constructor, additional
 protections

---
 indra/llmessage/llcoproceduremanager.cpp | 11 +++++++++++
 indra/newview/llviewerassetstorage.cpp   |  1 +
 2 files changed, 12 insertions(+)

diff --git a/indra/llmessage/llcoproceduremanager.cpp b/indra/llmessage/llcoproceduremanager.cpp
index c50d2bfd413..b94ec541e9b 100644
--- a/indra/llmessage/llcoproceduremanager.cpp
+++ b/indra/llmessage/llcoproceduremanager.cpp
@@ -140,11 +140,22 @@ LLCoprocedureManager::~LLCoprocedureManager()
 
 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)
     {
diff --git a/indra/newview/llviewerassetstorage.cpp b/indra/newview/llviewerassetstorage.cpp
index b345396c2f1..19f2456ae6a 100644
--- a/indra/newview/llviewerassetstorage.cpp
+++ b/indra/newview/llviewerassetstorage.cpp
@@ -115,6 +115,7 @@ LLViewerAssetStorage::LLViewerAssetStorage(LLMessageSystem *msg, LLXferManager *
       mCountSucceeded(0),
       mTotalBytesFetched(0)
 {
+    LLCoprocedureManager::instance().initializePool(VIEWER_ASSET_STORAGE_CORO_POOL);
 }
 
 
-- 
GitLab