|
|
|
|
@ -340,24 +340,24 @@ F32 gLogoutMaxTime = LOGOUT_REQUEST_TIME;
|
|
|
|
|
S32 gPendingMetricsUploads = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool gDisconnected = false;
|
|
|
|
|
bool gDisconnected = false;
|
|
|
|
|
|
|
|
|
|
// used to restore texture state after a mode switch
|
|
|
|
|
LLFrameTimer gRestoreGLTimer;
|
|
|
|
|
bool gRestoreGL = false;
|
|
|
|
|
bool gUseWireframe = false;
|
|
|
|
|
// Used to restore texture state after a mode switch
|
|
|
|
|
LLFrameTimer gRestoreGLTimer;
|
|
|
|
|
bool gRestoreGL = false;
|
|
|
|
|
bool gUseWireframe = false;
|
|
|
|
|
|
|
|
|
|
LLMemoryInfo gSysMemory;
|
|
|
|
|
U64Bytes gMemoryAllocated(0); // updated in display_stats() in llviewerdisplay.cpp
|
|
|
|
|
|
|
|
|
|
std::string gLastVersionChannel;
|
|
|
|
|
|
|
|
|
|
LLVector3 gWindVec(3.0, 3.0, 0.0);
|
|
|
|
|
LLVector3 gRelativeWindVec(0.0, 0.0, 0.0);
|
|
|
|
|
LLVector3 gWindVec(3.0, 3.0, 0.0);
|
|
|
|
|
LLVector3 gRelativeWindVec(0.0, 0.0, 0.0);
|
|
|
|
|
|
|
|
|
|
U32 gPacketsIn = 0;
|
|
|
|
|
U32 gPacketsIn = 0;
|
|
|
|
|
|
|
|
|
|
bool gPrintMessagesThisFrame = false;
|
|
|
|
|
bool gPrintMessagesThisFrame = false;
|
|
|
|
|
|
|
|
|
|
bool gRandomizeFramerate = false;
|
|
|
|
|
bool gPeriodicSlowFrame = false;
|
|
|
|
|
@ -723,6 +723,19 @@ public:
|
|
|
|
|
|
|
|
|
|
bool LLAppViewer::init()
|
|
|
|
|
{
|
|
|
|
|
struct ResultHandler
|
|
|
|
|
{
|
|
|
|
|
bool success = false; // Should be set in case of successful result
|
|
|
|
|
~ResultHandler()
|
|
|
|
|
{
|
|
|
|
|
if (!success)
|
|
|
|
|
{
|
|
|
|
|
// Mark critical flags in case of unsuccessful initialization
|
|
|
|
|
LLRenderTarget::sInitFailed = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} result_handler;
|
|
|
|
|
|
|
|
|
|
setupErrorHandling(mSecondInstance);
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
@ -752,7 +765,10 @@ bool LLAppViewer::init()
|
|
|
|
|
|
|
|
|
|
// inits from settings.xml and from strings.xml
|
|
|
|
|
if (!initConfiguration())
|
|
|
|
|
{
|
|
|
|
|
LL_WARNS("InitInfo") << "initConfiguration() failed." << LL_ENDL;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LL_INFOS("InitInfo") << "Configuration initialized." << LL_ENDL ;
|
|
|
|
|
|
|
|
|
|
@ -760,7 +776,6 @@ bool LLAppViewer::init()
|
|
|
|
|
initMaxHeapSize() ;
|
|
|
|
|
LLCoros::instance().setStackSize(gSavedSettings.getS32("CoroutineStackSize"));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Although initLoggingAndGetLastDuration() is the right place to mess with
|
|
|
|
|
// setFatalFunction(), we can't query gSavedSettings until after
|
|
|
|
|
// initConfiguration().
|
|
|
|
|
@ -783,14 +798,12 @@ bool LLAppViewer::init()
|
|
|
|
|
|
|
|
|
|
LLMachineID::init();
|
|
|
|
|
|
|
|
|
|
if (gSavedSettings.getBOOL("QAModeMetrics"))
|
|
|
|
|
{
|
|
|
|
|
if (gSavedSettings.getBOOL("QAModeMetrics"))
|
|
|
|
|
{
|
|
|
|
|
app_metrics_qa_mode = true;
|
|
|
|
|
app_metrics_interval = METRICS_INTERVAL_QA;
|
|
|
|
|
}
|
|
|
|
|
LLViewerAssetStatsFF::init();
|
|
|
|
|
app_metrics_qa_mode = true;
|
|
|
|
|
app_metrics_interval = METRICS_INTERVAL_QA;
|
|
|
|
|
}
|
|
|
|
|
LLViewerAssetStatsFF::init();
|
|
|
|
|
|
|
|
|
|
initThreads();
|
|
|
|
|
LL_INFOS("InitInfo") << "Threads initialized." << LL_ENDL ;
|
|
|
|
|
@ -906,8 +919,9 @@ bool LLAppViewer::init()
|
|
|
|
|
// do any necessary set-up for accepting incoming SLURLs from apps
|
|
|
|
|
initSLURLHandler();
|
|
|
|
|
|
|
|
|
|
if(false == initHardwareTest())
|
|
|
|
|
if (!initHardwareTest())
|
|
|
|
|
{
|
|
|
|
|
LL_WARNS("InitInfo") << "initHardwareTest() failed." << LL_ENDL;
|
|
|
|
|
// Early out from user choice.
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
@ -927,7 +941,7 @@ bool LLAppViewer::init()
|
|
|
|
|
std::ostringstream msg;
|
|
|
|
|
msg << LLTrans::getString("MBUnableToAccessFile");
|
|
|
|
|
OSMessageBox(msg.str(),LLStringUtil::null,OSMB_OK);
|
|
|
|
|
return 0;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
LL_INFOS("InitInfo") << "Cache initialization is done." << LL_ENDL ;
|
|
|
|
|
|
|
|
|
|
@ -958,8 +972,9 @@ bool LLAppViewer::init()
|
|
|
|
|
// If we don't have the right GL requirements, exit.
|
|
|
|
|
if (!gGLManager.mHasRequirements)
|
|
|
|
|
{
|
|
|
|
|
LL_WARNS("InitInfo") << "gGLManager.mHasRequirements is false." << LL_ENDL;
|
|
|
|
|
// already handled with a MBVideoDrvErr
|
|
|
|
|
return 0;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Without SSE2 support we will crash almost immediately, warn here.
|
|
|
|
|
@ -971,11 +986,11 @@ bool LLAppViewer::init()
|
|
|
|
|
LLNotifications::instance().getGlobalString("UnsupportedCPUSSE2"),
|
|
|
|
|
LLStringUtil::null,
|
|
|
|
|
OSMB_OK);
|
|
|
|
|
return 0;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// alert the user if they are using unsupported hardware
|
|
|
|
|
if(!gSavedSettings.getBOOL("AlertedUnsupportedHardware"))
|
|
|
|
|
if (!gSavedSettings.getBOOL("AlertedUnsupportedHardware"))
|
|
|
|
|
{
|
|
|
|
|
bool unsupported = false;
|
|
|
|
|
LLSD args;
|
|
|
|
|
@ -991,19 +1006,19 @@ bool LLAppViewer::init()
|
|
|
|
|
U64Bytes minRAM;
|
|
|
|
|
minRAMString >> minRAM;
|
|
|
|
|
|
|
|
|
|
if(!LLFeatureManager::getInstance()->isGPUSupported() && LLFeatureManager::getInstance()->getGPUClass() != GPU_CLASS_UNKNOWN)
|
|
|
|
|
if (!LLFeatureManager::getInstance()->isGPUSupported() && LLFeatureManager::getInstance()->getGPUClass() != GPU_CLASS_UNKNOWN)
|
|
|
|
|
{
|
|
|
|
|
minSpecs += LLNotifications::instance().getGlobalString("UnsupportedGPU");
|
|
|
|
|
minSpecs += "\n";
|
|
|
|
|
unsupported = true;
|
|
|
|
|
}
|
|
|
|
|
if(gSysCPU.getMHz() < minCPU)
|
|
|
|
|
if (gSysCPU.getMHz() < minCPU)
|
|
|
|
|
{
|
|
|
|
|
minSpecs += LLNotifications::instance().getGlobalString("UnsupportedCPU");
|
|
|
|
|
minSpecs += "\n";
|
|
|
|
|
unsupported = true;
|
|
|
|
|
}
|
|
|
|
|
if(gSysMemory.getPhysicalMemoryKB() < minRAM)
|
|
|
|
|
if (gSysMemory.getPhysicalMemoryKB() < minRAM)
|
|
|
|
|
{
|
|
|
|
|
minSpecs += LLNotifications::instance().getGlobalString("UnsupportedRAM");
|
|
|
|
|
minSpecs += "\n";
|
|
|
|
|
@ -1015,15 +1030,14 @@ bool LLAppViewer::init()
|
|
|
|
|
LLNotificationsUtil::add("UnknownGPU");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(unsupported)
|
|
|
|
|
if (unsupported)
|
|
|
|
|
{
|
|
|
|
|
if(!gSavedSettings.controlExists("WarnUnsupportedHardware")
|
|
|
|
|
if (!gSavedSettings.controlExists("WarnUnsupportedHardware")
|
|
|
|
|
|| gSavedSettings.getBOOL("WarnUnsupportedHardware"))
|
|
|
|
|
{
|
|
|
|
|
args["MINSPECS"] = minSpecs;
|
|
|
|
|
LLNotificationsUtil::add("UnsupportedHardware", args );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -1115,12 +1129,13 @@ bool LLAppViewer::init()
|
|
|
|
|
LLViewerJoystick::getInstance()->init(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
initializeSecHandler();
|
|
|
|
|
}
|
|
|
|
|
catch (LLProtectedDataException&)
|
|
|
|
|
{
|
|
|
|
|
LLNotificationsUtil::add("CorruptedProtectedDataStore");
|
|
|
|
|
LLNotificationsUtil::add("CorruptedProtectedDataStore");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gGLActive = false;
|
|
|
|
|
@ -1227,7 +1242,7 @@ bool LLAppViewer::init()
|
|
|
|
|
//datetime formatting functions didn't support some parameters such as "weekday".
|
|
|
|
|
//Names for days and months localized in xml are also useful for Polish locale(STORM-107).
|
|
|
|
|
std::string language = gSavedSettings.getString("Language");
|
|
|
|
|
if(language == "ja" || language == "pl")
|
|
|
|
|
if (language == "ja" || language == "pl")
|
|
|
|
|
{
|
|
|
|
|
LLStringOps::setupWeekDaysNames(LLTrans::getString("dateTimeWeekdaysNames"));
|
|
|
|
|
LLStringOps::setupWeekDaysShortNames(LLTrans::getString("dateTimeWeekdaysShortNames"));
|
|
|
|
|
@ -1284,6 +1299,8 @@ bool LLAppViewer::init()
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
result_handler.success = true;
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -2513,7 +2530,7 @@ bool tempSetControl(const std::string& name, const std::string& value)
|
|
|
|
|
|
|
|
|
|
bool LLAppViewer::initConfiguration()
|
|
|
|
|
{
|
|
|
|
|
//Load settings files list
|
|
|
|
|
// Load settings files list
|
|
|
|
|
std::string settings_file_list = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "settings_files.xml");
|
|
|
|
|
LLXMLNodePtr root;
|
|
|
|
|
bool success = LLXMLNode::parseFile(settings_file_list, root, NULL);
|
|
|
|
|
@ -2560,7 +2577,7 @@ bool LLAppViewer::initConfiguration()
|
|
|
|
|
|
|
|
|
|
// - load defaults
|
|
|
|
|
bool set_defaults = true;
|
|
|
|
|
if(!loadSettingsFromDirectory("Default", set_defaults))
|
|
|
|
|
if (!loadSettingsFromDirectory("Default", set_defaults))
|
|
|
|
|
{
|
|
|
|
|
OSMessageBox(
|
|
|
|
|
"Unable to load default settings file. The installation may be corrupted.",
|
|
|
|
|
@ -2577,13 +2594,12 @@ bool LLAppViewer::initConfiguration()
|
|
|
|
|
#ifndef LL_RELEASE_FOR_DOWNLOAD
|
|
|
|
|
// provide developer build only overrides for these control variables that are not
|
|
|
|
|
// persisted to settings.xml
|
|
|
|
|
LLControlVariable* c = gSavedSettings.getControl("AllowMultipleViewers");
|
|
|
|
|
if (c)
|
|
|
|
|
if (LLControlVariable* c = gSavedSettings.getControl("AllowMultipleViewers"))
|
|
|
|
|
{
|
|
|
|
|
c->setValue(true, false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
gSavedSettings.setBOOL("QAMode", true );
|
|
|
|
|
gSavedSettings.setBOOL("QAMode", true);
|
|
|
|
|
gSavedSettings.setS32("WatchdogEnabled", 0);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
@ -2616,7 +2632,7 @@ bool LLAppViewer::initConfiguration()
|
|
|
|
|
|
|
|
|
|
clp.configure(cmd_line_config, &gSavedSettings);
|
|
|
|
|
|
|
|
|
|
if(!initParseCommandLine(clp))
|
|
|
|
|
if (!initParseCommandLine(clp))
|
|
|
|
|
{
|
|
|
|
|
handleCommandLineError(clp);
|
|
|
|
|
return false;
|
|
|
|
|
@ -2626,7 +2642,7 @@ bool LLAppViewer::initConfiguration()
|
|
|
|
|
|
|
|
|
|
// If the user has specified a alternate settings file name.
|
|
|
|
|
// Load it now before loading the user_settings/settings.xml
|
|
|
|
|
if(clp.hasOption("settings"))
|
|
|
|
|
if (clp.hasOption("settings"))
|
|
|
|
|
{
|
|
|
|
|
std::string user_settings_filename =
|
|
|
|
|
gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,
|
|
|
|
|
@ -2668,7 +2684,7 @@ bool LLAppViewer::initConfiguration()
|
|
|
|
|
loadSettingsFromDirectory("UserSession");
|
|
|
|
|
|
|
|
|
|
// - apply command line settings
|
|
|
|
|
if (! clp.notify())
|
|
|
|
|
if (!clp.notify())
|
|
|
|
|
{
|
|
|
|
|
handleCommandLineError(clp);
|
|
|
|
|
return false;
|
|
|
|
|
@ -2677,7 +2693,7 @@ bool LLAppViewer::initConfiguration()
|
|
|
|
|
// Register the core crash option as soon as we can
|
|
|
|
|
// if we want gdb post-mortem on cores we need to be up and running
|
|
|
|
|
// ASAP or we might miss init issue etc.
|
|
|
|
|
if(gSavedSettings.getBOOL("DisableCrashLogger"))
|
|
|
|
|
if (gSavedSettings.getBOOL("DisableCrashLogger"))
|
|
|
|
|
{
|
|
|
|
|
LL_WARNS() << "Crashes will be handled by system, stack trace logs and crash logger are both disabled" << LL_ENDL;
|
|
|
|
|
disableCrashlogger();
|
|
|
|
|
@ -2691,7 +2707,7 @@ bool LLAppViewer::initConfiguration()
|
|
|
|
|
initConsole();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(clp.hasOption("help"))
|
|
|
|
|
if (clp.hasOption("help"))
|
|
|
|
|
{
|
|
|
|
|
std::ostringstream msg;
|
|
|
|
|
msg << LLTrans::getString("MBCmdLineUsg") << "\n" << clp;
|
|
|
|
|
@ -2705,17 +2721,17 @@ bool LLAppViewer::initConfiguration()
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(clp.hasOption("set"))
|
|
|
|
|
if (clp.hasOption("set"))
|
|
|
|
|
{
|
|
|
|
|
const LLCommandLineParser::token_vector_t& set_values = clp.getOption("set");
|
|
|
|
|
if(0x1 & set_values.size())
|
|
|
|
|
if (0x1 & set_values.size())
|
|
|
|
|
{
|
|
|
|
|
LL_WARNS() << "Invalid '--set' parameter count." << LL_ENDL;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
LLCommandLineParser::token_vector_t::const_iterator itr = set_values.begin();
|
|
|
|
|
for(; itr != set_values.end(); ++itr)
|
|
|
|
|
for (; itr != set_values.end(); ++itr)
|
|
|
|
|
{
|
|
|
|
|
const std::string& name = *itr;
|
|
|
|
|
const std::string& value = *(++itr);
|
|
|
|
|
@ -2727,12 +2743,13 @@ bool LLAppViewer::initConfiguration()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (clp.hasOption("logevents")) {
|
|
|
|
|
if (clp.hasOption("logevents"))
|
|
|
|
|
{
|
|
|
|
|
LLViewerEventRecorder::instance().setEventLoggingOn();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::string CmdLineChannel(gSavedSettings.getString("CmdLineChannel"));
|
|
|
|
|
if(! CmdLineChannel.empty())
|
|
|
|
|
if (!CmdLineChannel.empty())
|
|
|
|
|
{
|
|
|
|
|
LLVersionInfo::instance().resetChannel(CmdLineChannel);
|
|
|
|
|
}
|
|
|
|
|
@ -2747,7 +2764,7 @@ bool LLAppViewer::initConfiguration()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::string test_name(gSavedSettings.getString("LogMetrics"));
|
|
|
|
|
if (! test_name.empty())
|
|
|
|
|
if (!test_name.empty())
|
|
|
|
|
{
|
|
|
|
|
LLTrace::BlockTimer::sMetricLog = true;
|
|
|
|
|
// '--logmetrics' is specified with a named test metric argument so the data gathering is done only on that test
|
|
|
|
|
@ -2789,7 +2806,7 @@ bool LLAppViewer::initConfiguration()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const LLControlVariable* skinfolder = gSavedSettings.getControl("SkinCurrent");
|
|
|
|
|
if(skinfolder && LLStringUtil::null != skinfolder->getValue().asString())
|
|
|
|
|
if (skinfolder && LLStringUtil::null != skinfolder->getValue().asString())
|
|
|
|
|
{
|
|
|
|
|
// Examining "Language" may not suffice -- see LLUI::getLanguage()
|
|
|
|
|
// logic. Unfortunately LLUI::getLanguage() doesn't yet do us much
|
|
|
|
|
@ -2823,7 +2840,6 @@ bool LLAppViewer::initConfiguration()
|
|
|
|
|
llassert_always(!gSavedSettings.getBOOL("SLURLPassToOtherInstance"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Handle slurl use. NOTE: Don't let SL-55321 reappear.
|
|
|
|
|
// This initial-SLURL logic, up through the call to
|
|
|
|
|
// sendURLToOtherInstance(), must precede LLSplashScreen::show() --
|
|
|
|
|
@ -2849,21 +2865,21 @@ bool LLAppViewer::initConfiguration()
|
|
|
|
|
std::string starting_location;
|
|
|
|
|
|
|
|
|
|
std::string cmd_line_login_location(gSavedSettings.getString("CmdLineLoginLocation"));
|
|
|
|
|
if(! cmd_line_login_location.empty())
|
|
|
|
|
if (!cmd_line_login_location.empty())
|
|
|
|
|
{
|
|
|
|
|
starting_location = cmd_line_login_location;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
std::string default_login_location(gSavedSettings.getString("DefaultLoginLocation"));
|
|
|
|
|
if (! default_login_location.empty())
|
|
|
|
|
if (!default_login_location.empty())
|
|
|
|
|
{
|
|
|
|
|
starting_location = default_login_location;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LLSLURL start_slurl;
|
|
|
|
|
if (! starting_location.empty())
|
|
|
|
|
if (!starting_location.empty())
|
|
|
|
|
{
|
|
|
|
|
start_slurl = starting_location;
|
|
|
|
|
LLStartUp::setStartSLURL(start_slurl);
|
|
|
|
|
@ -2875,12 +2891,12 @@ bool LLAppViewer::initConfiguration()
|
|
|
|
|
|
|
|
|
|
// NextLoginLocation is set as a side effect of LLStartUp::setStartSLURL()
|
|
|
|
|
std::string nextLoginLocation = gSavedSettings.getString( "NextLoginLocation" );
|
|
|
|
|
if ( !nextLoginLocation.empty() )
|
|
|
|
|
if (!nextLoginLocation.empty())
|
|
|
|
|
{
|
|
|
|
|
LL_DEBUGS("AppInit")<<"set start from NextLoginLocation: "<<nextLoginLocation<<LL_ENDL;
|
|
|
|
|
LLStartUp::setStartSLURL(LLSLURL(nextLoginLocation));
|
|
|
|
|
}
|
|
|
|
|
else if ( ( clp.hasOption("login") || clp.hasOption("autologin"))
|
|
|
|
|
else if ((clp.hasOption("login") || clp.hasOption("autologin"))
|
|
|
|
|
&& gSavedSettings.getString("CmdLineLoginLocation").empty())
|
|
|
|
|
{
|
|
|
|
|
// If automatic login from command line with --login switch
|
|
|
|
|
@ -2936,7 +2952,7 @@ bool LLAppViewer::initConfiguration()
|
|
|
|
|
#endif
|
|
|
|
|
if (!gArgs.empty())
|
|
|
|
|
{
|
|
|
|
|
gWindowTitle += std::string(" ") + gArgs;
|
|
|
|
|
gWindowTitle += std::string(" ") + gArgs;
|
|
|
|
|
}
|
|
|
|
|
LLStringUtil::truncate(gWindowTitle, 255);
|
|
|
|
|
|
|
|
|
|
@ -2960,7 +2976,7 @@ bool LLAppViewer::initConfiguration()
|
|
|
|
|
// but make sure the setting is *not* persisted.
|
|
|
|
|
// Also see LLVivoxVoiceClient::voiceEnabled()
|
|
|
|
|
LLControlVariable* enable_voice = gSavedSettings.getControl("EnableVoiceChat");
|
|
|
|
|
if(enable_voice)
|
|
|
|
|
if (enable_voice)
|
|
|
|
|
{
|
|
|
|
|
const bool DO_NOT_PERSIST = false;
|
|
|
|
|
enable_voice->setValue(LLSD(false), DO_NOT_PERSIST);
|
|
|
|
|
@ -3164,8 +3180,8 @@ bool LLAppViewer::initWindow()
|
|
|
|
|
gSavedSettings.setBOOL("RenderInitError", false);
|
|
|
|
|
gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), true );
|
|
|
|
|
|
|
|
|
|
//If we have a startup crash, it's usually near GL initialization, so simulate that.
|
|
|
|
|
if(gCrashOnStartup)
|
|
|
|
|
// If we have a startup crash, it's usually near GL initialization, so simulate that.
|
|
|
|
|
if (gCrashOnStartup)
|
|
|
|
|
{
|
|
|
|
|
LLAppViewer::instance()->forceErrorLLError();
|
|
|
|
|
}
|
|
|
|
|
@ -3990,11 +4006,11 @@ void LLAppViewer::requestQuit()
|
|
|
|
|
|
|
|
|
|
LLViewerRegion* region = gAgent.getRegion();
|
|
|
|
|
|
|
|
|
|
if( (LLStartUp::getStartupState() < STATE_STARTED) || !region )
|
|
|
|
|
if ((LLStartUp::getStartupState() < STATE_STARTED) || !region)
|
|
|
|
|
{
|
|
|
|
|
// If we have a region, make some attempt to send a logout request first.
|
|
|
|
|
// This prevents the halfway-logged-in avatar from hanging around inworld for a couple minutes.
|
|
|
|
|
if(region)
|
|
|
|
|
if (region)
|
|
|
|
|
{
|
|
|
|
|
sendLogoutRequest();
|
|
|
|
|
}
|
|
|
|
|
@ -5043,9 +5059,6 @@ void LLAppViewer::idleShutdown()
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ProductEngine: Try moving this code to where we shut down sTextureCache in cleanup()
|
|
|
|
|
// *TODO: ugly
|
|
|
|
|
static bool saved_teleport_history = false;
|
|
|
|
|
@ -5094,7 +5107,7 @@ void LLAppViewer::idleShutdown()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// All floaters are closed. Tell server we want to quit.
|
|
|
|
|
if( !logoutRequestSent() )
|
|
|
|
|
if (!logoutRequestSent())
|
|
|
|
|
{
|
|
|
|
|
sendLogoutRequest();
|
|
|
|
|
|
|
|
|
|
@ -5106,8 +5119,8 @@ void LLAppViewer::idleShutdown()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Make sure that we quit if we haven't received a reply from the server.
|
|
|
|
|
if( logoutRequestSent()
|
|
|
|
|
&& gLogoutTimer.getElapsedTimeF32() > gLogoutMaxTime )
|
|
|
|
|
if (logoutRequestSent()
|
|
|
|
|
&& gLogoutTimer.getElapsedTimeF32() > gLogoutMaxTime)
|
|
|
|
|
{
|
|
|
|
|
forceQuit();
|
|
|
|
|
return;
|
|
|
|
|
|