diff options
| author | Andrey Lihatskiy <alihatskiy@productengine.com> | 2020-08-11 01:35:04 +0300 | 
|---|---|---|
| committer | Andrey Lihatskiy <alihatskiy@productengine.com> | 2020-08-11 01:35:04 +0300 | 
| commit | f29ac6757c24010806bc6b3d943370a4aaf7023d (patch) | |
| tree | c2074ac83576132a703a2b0edc59fb6ba98aa03f | |
| parent | 43941a3d876b854560b06906665d689c3924aed1 (diff) | |
| parent | 89cde15fb8c52071805af78e61848e743f2ab2f1 (diff) | |
Merge branch 'master' into DRTVWR-507-maint
| -rw-r--r-- | autobuild.xml | 10 | ||||
| -rw-r--r-- | indra/edit-me-to-trigger-new-build.txt | 4 | ||||
| -rw-r--r-- | indra/llmessage/llcoproceduremanager.cpp | 26 | ||||
| -rw-r--r-- | indra/newview/VIEWER_VERSION.txt | 2 | ||||
| -rw-r--r-- | indra/newview/llappviewer.cpp | 11 | ||||
| -rw-r--r-- | indra/newview/llstartup.cpp | 20 | ||||
| -rw-r--r-- | indra/newview/llviewerassetstorage.cpp | 13 | ||||
| -rw-r--r-- | indra/newview/llviewerassetstorage.h | 2 | 
8 files changed, 52 insertions, 36 deletions
| diff --git a/autobuild.xml b/autobuild.xml index f160184210..1e9c1eb120 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -3204,9 +3204,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>archive</key>              <map>                <key>hash</key> -              <string>d15ad6b86c0e1ef4a1fc46478da65929</string> +              <string>c5ab9d9d7482e48cd76f4bf391900a8c</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54837/510043/viewer_manager-2.0.538967-darwin64-538967.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/43369/385585/viewer_manager-2.0.531000-darwin64-531000.tar.bz2</string>              </map>              <key>name</key>              <string>darwin64</string> @@ -3228,9 +3228,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>archive</key>              <map>                <key>hash</key> -              <string>856d1e4b60ef57135ecd99cd608e76bd</string> +              <string>6b10d7407686d9e12e63576256581e3e</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54960/511732/viewer_manager-2.0.538967-windows-538967.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/43370/385592/viewer_manager-2.0.531000-windows-531000.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string> @@ -3241,7 +3241,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>          <key>source_type</key>          <string>hg</string>          <key>version</key> -        <string>2.0.538967</string> +        <string>2.0.531000</string>        </map>        <key>vlc-bin</key>        <map> diff --git a/indra/edit-me-to-trigger-new-build.txt b/indra/edit-me-to-trigger-new-build.txt index fd40910d9e..e69de29bb2 100644 --- a/indra/edit-me-to-trigger-new-build.txt +++ b/indra/edit-me-to-trigger-new-build.txt @@ -1,4 +0,0 @@ - - - - diff --git a/indra/llmessage/llcoproceduremanager.cpp b/indra/llmessage/llcoproceduremanager.cpp index a7bd836c4d..42c19e3b1c 100644 --- a/indra/llmessage/llcoproceduremanager.cpp +++ b/indra/llmessage/llcoproceduremanager.cpp @@ -280,11 +280,14 @@ LLCoprocedurePool::LLCoprocedurePool(const std::string &poolName, size_t size):      mHTTPPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID),      mCoroMapping()  { -    // store in our LLTempBoundListener so that when the LLCoprocedurePool is -    // destroyed, we implicitly disconnect from this LLEventPump -    mStatusListener = LLEventPumps::instance().obtain("LLApp").listen( -        poolName, -        [pendingCoprocs=mPendingCoprocs, poolName](const LLSD& status) +    try +    { +        // store in our LLTempBoundListener so that when the LLCoprocedurePool is +        // destroyed, we implicitly disconnect from this LLEventPump +        // Monitores application status +        mStatusListener = LLEventPumps::instance().obtain("LLApp").listen( +            poolName + "_pool", // Make sure it won't repeat names from lleventcoro +            [pendingCoprocs = mPendingCoprocs, poolName](const LLSD& status)          {              auto& statsd = status["status"];              if (statsd.asString() != "running") @@ -298,6 +301,19 @@ LLCoprocedurePool::LLCoprocedurePool(const std::string &poolName, size_t size):              }              return false;          }); +    } +    catch (const LLEventPump::DupListenerName &) +    { +        // This shounldn't be possible since LLCoprocedurePool is supposed to have unique names, +        // yet it somehow did happen, as result pools got '_pool' suffix and this catch. +        // +        // If this somehow happens again it is better to crash later on shutdown due to pump +        // not stopping coroutine and see warning in logs than on startup or during login. +        LL_WARNS("CoProcMgr") << "Attempted to register dupplicate listener name: " << poolName +                              << "_pool. Failed to start listener." << LL_ENDL; + +        llassert(0); // Fix Me! Ignoring missing listener! +    }      for (size_t count = 0; count < mPoolSize; ++count)      { diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index 3d05e8cfb4..3c43d71599 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -6.4.6 +6.4.7 diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 2caf4bda93..f284e6b5b7 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3101,8 +3101,15 @@ LLSD LLAppViewer::getViewerInfo() const  	// return a URL to the release notes for this viewer, such as:  	// https://releasenotes.secondlife.com/viewer/2.1.0.123456.html -	std::string url = versionInfo.getReleaseNotes(); -	info["VIEWER_RELEASE_NOTES_URL"] = url.empty()? LLTrans::getString("RetrievingData") : url; +	std::string url = versionInfo.getReleaseNotes(); // VVM supplied +    if (url.empty()) +    { +        url = LLTrans::getString("RELEASE_NOTES_BASE_URL"); +        if (!LLStringUtil::endsWith(url, "/")) +            url += "/"; +        url += LLURI::escape(versionInfo.getVersion()) + ".html"; +    } +	info["VIEWER_RELEASE_NOTES_URL"] = url;  	// Position  	LLViewerRegion* region = gAgent.getRegion(); diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 05656162f3..18638fdb49 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -2300,29 +2300,13 @@ void login_callback(S32 option, void *userdata)  void show_release_notes_if_required()  {      static bool release_notes_shown = false; -    // We happen to know that instantiating LLVersionInfo implicitly -    // instantiates the LLEventMailDrop named "relnotes", which we (might) use -    // below. If viewer release notes stop working, might be because that -    // LLEventMailDrop got moved out of LLVersionInfo and hasn't yet been -    // instantiated.      if (!release_notes_shown && (LLVersionInfo::instance().getChannelAndVersion() != gLastRunVersion)          && LLVersionInfo::instance().getViewerMaturity() != LLVersionInfo::TEST_VIEWER // don't show Release Notes for the test builds          && gSavedSettings.getBOOL("UpdaterShowReleaseNotes")          && !gSavedSettings.getBOOL("FirstLoginThisInstall"))      { -        // Instantiate a "relnotes" listener which assumes any arriving event -        // is the release notes URL string. Since "relnotes" is an -        // LLEventMailDrop, this listener will be invoked whether or not the -        // URL has already been posted. If so, it will fire immediately; -        // otherwise it will fire whenever the URL is (later) posted. Either -        // way, it will display the release notes as soon as the URL becomes -        // available. -        LLEventPumps::instance().obtain("relnotes").listen( -            "showrelnotes", -            [](const LLSD& url){ -                LLWeb::loadURLInternal(url.asString()); -                return false; -            }); +        LLSD info(LLAppViewer::instance()->getViewerInfo()); +        LLWeb::loadURLInternal(info["VIEWER_RELEASE_NOTES_URL"]);          release_notes_shown = true;      }  } diff --git a/indra/newview/llviewerassetstorage.cpp b/indra/newview/llviewerassetstorage.cpp index e0b64403ef..b295fa2977 100644 --- a/indra/newview/llviewerassetstorage.cpp +++ b/indra/newview/llviewerassetstorage.cpp @@ -49,6 +49,8 @@  /// LLViewerAssetRequest  ///---------------------------------------------------------------------------- +static const std::string VIEWER_ASSET_STORAGE_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_STORAGE_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_STORAGE_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 cefe215431..ef01d179b7 100644 --- a/indra/newview/llviewerassetstorage.h +++ b/indra/newview/llviewerassetstorage.h @@ -43,6 +43,8 @@ public:  	LLViewerAssetStorage(LLMessageSystem *msg, LLXferManager *xfer,  				   LLVFS *vfs, LLVFS *static_vfs); +	~LLViewerAssetStorage(); +  	virtual void storeAssetData(  		const LLTransactionID& tid,  		LLAssetType::EType atype, | 
