Merge branch 'master' into DRTVWR-507-maint

master
Andrey Lihatskiy 2020-08-11 01:35:04 +03:00
commit f29ac6757c
8 changed files with 52 additions and 36 deletions

View File

@ -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>

View File

@ -1,4 +0,0 @@

View File

@ -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)
{

View File

@ -1 +1 @@
6.4.6
6.4.7

View File

@ -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();

View File

@ -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;
}
}

View File

@ -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));
}
}

View File

@ -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,