From 135a85ec62d1bf437ec2d6f485e33e9ceb0c71ab Mon Sep 17 00:00:00 2001
From: Andrey Kleshchev <andreykproductengine@lindenlab.com>
Date: Thu, 30 Jul 2020 21:07:35 +0300
Subject: [PATCH] SL-13626 Fix asset storage coroutine shutdown

---
 indra/newview/llviewerassetstorage.cpp | 13 ++++++++++++-
 indra/newview/llviewerassetstorage.h   |  2 ++
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/indra/newview/llviewerassetstorage.cpp b/indra/newview/llviewerassetstorage.cpp
index e0b64403eff..22269a92085 100644
--- a/indra/newview/llviewerassetstorage.cpp
+++ b/indra/newview/llviewerassetstorage.cpp
@@ -49,6 +49,8 @@
 /// LLViewerAssetRequest
 ///----------------------------------------------------------------------------
 
+static const std::string VIEWER_ASSET_STROTRAGE_CORO_POOL = "VAssetStorage";
+
 /**
  * @brief Local class to encapsulate asset fetch requests with a timestamp.
  *
@@ -127,6 +129,15 @@ LLViewerAssetStorage::LLViewerAssetStorage(LLMessageSystem *msg, LLXferManager *
 {
 }
 
+LLViewerAssetStorage::~LLViewerAssetStorage()
+{
+    if (!LLCoprocedureManager::wasDeleted())
+    {
+        // This class has dedicated coroutine pool, clean it up, otherwise coroutines will crash later. 
+        LLCoprocedureManager::instance().close(VIEWER_ASSET_STROTRAGE_CORO_POOL);
+    }
+}
+
 // virtual 
 void LLViewerAssetStorage::storeAssetData(
     const LLTransactionID& tid,
@@ -399,7 +410,7 @@ void LLViewerAssetStorage::queueRequestHttp(
         bool is_temp = false;
         LLViewerAssetStatsFF::record_enqueue(atype, with_http, is_temp);
 
-        LLCoprocedureManager::instance().enqueueCoprocedure("AssetStorage","LLViewerAssetStorage::assetRequestCoro",
+        LLCoprocedureManager::instance().enqueueCoprocedure(VIEWER_ASSET_STROTRAGE_CORO_POOL,"LLViewerAssetStorage::assetRequestCoro",
             boost::bind(&LLViewerAssetStorage::assetRequestCoro, this, req, uuid, atype, callback, user_data));
     }
 }
diff --git a/indra/newview/llviewerassetstorage.h b/indra/newview/llviewerassetstorage.h
index cefe2154315..ef01d179b7b 100644
--- a/indra/newview/llviewerassetstorage.h
+++ b/indra/newview/llviewerassetstorage.h
@@ -43,6 +43,8 @@ class LLViewerAssetStorage : public LLAssetStorage
 	LLViewerAssetStorage(LLMessageSystem *msg, LLXferManager *xfer,
 				   LLVFS *vfs, LLVFS *static_vfs);
 
+	~LLViewerAssetStorage();
+
 	virtual void storeAssetData(
 		const LLTransactionID& tid,
 		LLAssetType::EType atype,
-- 
GitLab