summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2018-10-03 14:00:05 -0400
committerNat Goodspeed <nat@lindenlab.com>2018-10-03 14:00:05 -0400
commitb1955d4247a4d28a3a4c259036390ff632e80008 (patch)
tree3cc4f620431c4cef25dd880e1ff391ada1a2c93b /indra/newview
parent6e1b2e137e2b6c6d92d14f478b6908c0c2f1e231 (diff)
DRTVWR-474: Do NOT autokill updater process on viewer termination.
The updater is required to survive beyond termination of the viewer that launched it so it can launch the next installer, or a replacement viewer. Having the old viewer forcibly terminate it on shutdown would be counter- productive. Introduce a third LLLeap::create() overload taking LLProcess::Params, which gives access to autokill, cwd and other options previously unsupported by LLLeap. Reimplement the existing create() overloads in terms of this new one, since LLLeapImpl::LLLeapImpl() is already based on LLProcess::Params anyway. Use LLProcess::Params in LLAppViewer::init() to specify the updater process, setting autokill=false. Refactoring LLLeapImpl() apparently involved engaging an LLInitParam::Block feature never before used: had to drag operator() into Multiple from its base class TypedParam (as has been done in other TypedParam subclasses).
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llappviewer.cpp33
1 files changed, 16 insertions, 17 deletions
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 776fc85a2d..bc4ce19f77 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1130,30 +1130,35 @@ bool LLAppViewer::init()
gGLActive = FALSE;
- std::vector<std::string> updater
+ LLProcess::Params updater;
+ updater.desc = "updater process";
+ // Because it's the updater, it MUST persist beyond the lifespan of the
+ // viewer itself.
+ updater.autokill = false;
#if LL_WINDOWS
- { gDirUtilp->getExpandedFilename(LL_PATH_EXECUTABLE, "updater.exe") };
+ updater.executable = gDirUtilp->getExpandedFilename(LL_PATH_EXECUTABLE, "updater.exe");
#elif LL_DARWIN
// explicitly run the system Python interpreter on updater.py
- { "python", gDirUtilp->add(gDirUtilp->getAppRODataDir(), "updater", "updater.py") };
+ updater.executable = "python";
+ updater.args.add(gDirUtilp->add(gDirUtilp->getAppRODataDir(), "updater", "updater.py"));
#else
- { gDirUtilp->getExpandedFilename(LL_PATH_EXECUTABLE, "updater") };
+ updater.executable = gDirUtilp->getExpandedFilename(LL_PATH_EXECUTABLE, "updater");
#endif
// add LEAP mode command-line argument to whichever of these we selected
- updater.push_back("leap");
+ updater.args.add("leap");
// UpdaterServiceSettings
- updater.push_back(stringize(gSavedSettings.getU32("UpdaterServiceSetting")));
+ updater.args.add(stringize(gSavedSettings.getU32("UpdaterServiceSetting")));
// channel
- updater.push_back(LLVersionInfo::getChannel());
+ updater.args.add(LLVersionInfo::getChannel());
// testok
- updater.push_back(stringize(gSavedSettings.getBOOL("UpdaterWillingToTest")));
+ updater.args.add(stringize(gSavedSettings.getBOOL("UpdaterWillingToTest")));
// UpdaterServiceURL
- updater.push_back(gSavedSettings.getString("UpdaterServiceURL"));
+ updater.args.add(gSavedSettings.getString("UpdaterServiceURL"));
// ForceAddressSize
- updater.push_back(stringize(gSavedSettings.getU32("ForceAddressSize")));
+ updater.args.add(stringize(gSavedSettings.getU32("ForceAddressSize")));
// Run the updater. An exception from launching the updater should bother us.
- LLLeap::create("updater process", updater, true);
+ LLLeap::create(updater, true);
// Iterate over --leap command-line options. But this is a bit tricky: if
// there's only one, it won't be an array at all.
@@ -3923,12 +3928,6 @@ void LLAppViewer::requestQuit()
gAgentAvatarp->updateAvatarRezMetrics(true); // force a last packet to be sent.
}
- // Try to send last batch of avatar rez metrics.
- if (!gDisconnected && isAgentAvatarValid())
- {
- gAgentAvatarp->updateAvatarRezMetrics(true); // force a last packet to be sent.
- }
-
LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral*)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE);
effectp->setPositionGlobal(gAgent.getPositionGlobal());
effectp->setColor(LLColor4U(gAgent.getEffectColor()));