From 9dfb5614e640b3350d89500b7d7486e2065ed7e2 Mon Sep 17 00:00:00 2001
From: "Brad Payne (Vir Linden)" <vir@lindenlab.com>
Date: Fri, 28 Apr 2017 16:10:24 -0400
Subject: [PATCH] MAINT-7343 - moved asset downloads to use coprocedure pools,
 which should reduce the size of potential memory spikes

---
 indra/newview/app_settings/settings.xml | 9 +++++++++
 indra/newview/llviewerassetstorage.cpp  | 6 ++++--
 indra/newview/llviewerassetstorage.h    | 5 ++++-
 3 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index d2d629339d2..f2ae685432b 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -14723,6 +14723,15 @@
         <key>Value</key>
             <real>1</real>
         </map>
+    <key>PoolSizeAssetStorage</key>
+        <map>
+        <key>Comment</key>
+            <string>Coroutine Pool size for AssetStorage requests</string>
+        <key>Type</key>
+            <string>U32</string>
+        <key>Value</key>
+            <real>12</real>
+        </map>
 
     <!-- Settings below are for back compatibility only.
     They are not used in current viewer anymore. But they can't be removed to avoid
diff --git a/indra/newview/llviewerassetstorage.cpp b/indra/newview/llviewerassetstorage.cpp
index 9918d226c20..71507b56085 100644
--- a/indra/newview/llviewerassetstorage.cpp
+++ b/indra/newview/llviewerassetstorage.cpp
@@ -40,6 +40,7 @@
 #include "lltransfertargetvfile.h"
 #include "llviewerassetstats.h"
 #include "llcoros.h"
+#include "llcoproceduremanager.h"
 #include "lleventcoro.h"
 #include "llsdutil.h"
 #include "llworld.h"
@@ -398,8 +399,8 @@ void LLViewerAssetStorage::queueRequestHttp(
         bool is_temp = false;
         LLViewerAssetStatsFF::record_enqueue(atype, with_http, is_temp);
 
-        LLCoros::instance().launch("LLViewerAssetStorage::assetRequestCoro",
-                                   boost::bind(&LLViewerAssetStorage::assetRequestCoro, this, req, uuid, atype, callback, user_data));
+        LLCoprocedureManager::instance().enqueueCoprocedure("AssetStorage","LLViewerAssetStorage::assetRequestCoro",
+            boost::bind(&LLViewerAssetStorage::assetRequestCoro, this, _1, req, uuid, atype, callback, user_data));
     }
 }
 
@@ -433,6 +434,7 @@ struct LLScopedIncrement
 };
 
 void LLViewerAssetStorage::assetRequestCoro(
+    LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &defaultHttpAdapter, // not used
     LLViewerAssetRequest *req,
     const LLUUID& uuid,
     LLAssetType::EType atype,
diff --git a/indra/newview/llviewerassetstorage.h b/indra/newview/llviewerassetstorage.h
index 8a582413785..a32b3bb7000 100644
--- a/indra/newview/llviewerassetstorage.h
+++ b/indra/newview/llviewerassetstorage.h
@@ -28,6 +28,7 @@
 #define LLVIEWERASSETSTORAGE_H
 
 #include "llassetstorage.h"
+#include "llcorehttputil.h"
 
 class LLVFile;
 
@@ -82,7 +83,9 @@ class LLViewerAssetStorage : public LLAssetStorage
 
     void capsRecvForRegion(const LLUUID& region_id, std::string pumpname);
     
-    void assetRequestCoro(LLViewerAssetRequest *req,
+    void assetRequestCoro(
+                          LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &defaultHttpAdapter,
+                          LLViewerAssetRequest *req,
                           const LLUUID& uuid,
                           LLAssetType::EType atype,
                           void (*callback) (LLVFS *vfs, const LLUUID&, LLAssetType::EType, void *, S32, LLExtStat),
-- 
GitLab