diff options
| author | Steven Bennetts <steve@lindenlab.com> | 2008-04-03 19:21:14 +0000 |
|---|---|---|
| committer | Steven Bennetts <steve@lindenlab.com> | 2008-04-03 19:21:14 +0000 |
| commit | b5936a4b1d8780b5b8cd425998eacd2c64ffa693 (patch) | |
| tree | c1581bcf34e96a897c6e1d9a4aed95f353713baa /indra/newview/llappviewer.cpp | |
| parent | 55c25229b79b1755c989e5996c8e8d118f369721 (diff) | |
1.19.1 Viewer merge: QAR_367, QAR-374, QAR-408, QAR-426
QAR_367 (RC1) - merge Branch_1-19-1-Viewer -r 81609 : 81993 -> release
QAR-374 (RC2) - merge Branch_1-19-1-Viewer -r 81993 : 82589 -> release
QAR-408 (RC3) - merge Branch_1-19-1-Viewer -r 82589 : 83128 -> release
QAR-426 (rc4) - merge Branch_1-19-1-Viewer -r 83125 : 83719 -> release
(Actual merge: release@83793 Branch_1-19-1-Viewer-merge@83953 -> release)
Diffstat (limited to 'indra/newview/llappviewer.cpp')
| -rw-r--r-- | indra/newview/llappviewer.cpp | 95 |
1 files changed, 85 insertions, 10 deletions
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index aefa1af106..502160716e 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -287,6 +287,7 @@ BOOL gRandomizeFramerate = FALSE; BOOL gPeriodicSlowFrame = FALSE; BOOL gLLErrorActivated = FALSE; +BOOL gLogoutInProgress = FALSE; //////////////////////////////////////////////////////////// // Internal globals... that should be removed. static LLString gArgs; @@ -294,6 +295,7 @@ static LLString gArgs; const char* MARKER_FILE_NAME = "SecondLife.exec_marker"; const char* ERROR_MARKER_FILE_NAME = "SecondLife.error_marker"; const char* LLERROR_MARKER_FILE_NAME = "SecondLife.llerror_marker"; +const char* LOGOUT_MARKER_FILE_NAME = "SecondLife.logout_marker"; static BOOL gDoDisconnect = FALSE; static LLString gLaunchFileOnQuit; @@ -441,7 +443,7 @@ static void settings_modify() #endif // propagate push to talk preference to current status - gSavedSettings.setBOOL("PTTCurrentlyEnabled", gSavedSettings.getBOOL("EnablePushToTalk")); + gSavedSettings.setBOOL("PTTCurrentlyEnabled", TRUE); //gSavedSettings.getBOOL("EnablePushToTalk")); } void initGridChoice() @@ -882,9 +884,10 @@ bool LLAppViewer::mainLoop() while (!LLApp::isExiting()) { LLFastTimer::reset(); // Should be outside of any timer instances + try { LLFastTimer t(LLFastTimer::FTM_FRAME); - + { LLFastTimer t2(LLFastTimer::FTM_MESSAGES); #if LL_WINDOWS @@ -1040,12 +1043,23 @@ bool LLAppViewer::mainLoop() } } + catch(std::bad_alloc) + { + llwarns << "Bad memory allocation in LLAppViewer::mainLoop()!" << llendl ; + } } // Save snapshot for next time, if we made it through initialization if (STATE_STARTED == LLStartUp::getStartupState()) { - saveFinalSnapshot(); + try + { + saveFinalSnapshot(); + } + catch(std::bad_alloc) + { + llwarns << "Bad memory allocation when saveFinalSnapshot() is called!" << llendl ; + } } delete gServicePump; @@ -2073,6 +2087,7 @@ void LLAppViewer::writeSystemInfo() gDebugInfo["ClientInfo"]["PatchVersion"] = LL_VERSION_PATCH; gDebugInfo["ClientInfo"]["BuildVersion"] = LL_VERSION_BUILD; + gDebugInfo["CPUInfo"]["CPUString"] = gSysCPU.getCPUString(); gDebugInfo["CPUInfo"]["CPUFamily"] = gSysCPU.getFamily(); gDebugInfo["CPUInfo"]["CPUMhz"] = gSysCPU.getMhz(); gDebugInfo["CPUInfo"]["CPUAltivec"] = gSysCPU.hasAltivec(); @@ -2118,11 +2133,33 @@ void LLAppViewer::handleViewerCrash() } pApp->mReportedCrash = TRUE; + //We already do this in writeSystemInfo(), but we do it again here to make /sure/ we have a version + //to check against no matter what + gDebugInfo["ClientInfo"]["Name"] = gSavedSettings.getString("VersionChannelName"); + + gDebugInfo["ClientInfo"]["MajorVersion"] = LL_VERSION_MAJOR; + gDebugInfo["ClientInfo"]["MinorVersion"] = LL_VERSION_MINOR; + gDebugInfo["ClientInfo"]["PatchVersion"] = LL_VERSION_PATCH; + gDebugInfo["ClientInfo"]["BuildVersion"] = LL_VERSION_BUILD; + gDebugInfo["SettingsFilename"] = gSavedSettings.getString("ClientSettingsFile"); gDebugInfo["CAFilename"] = gDirUtilp->getCAFile(); gDebugInfo["ViewerExePath"] = gDirUtilp->getExecutablePathAndName().c_str(); gDebugInfo["CurrentPath"] = gDirUtilp->getCurPath().c_str(); - gDebugInfo["CurrentSimHost"] = gAgent.getRegionHost().getHostName(); + if(gLogoutInProgress) + { + gDebugInfo["LastExecEvent"] = LAST_EXEC_LOGOUT_CRASH; + } + else + { + gDebugInfo["LastExecEvent"] = gLLErrorActivated ? LAST_EXEC_LLERROR_CRASH : LAST_EXEC_OTHER_CRASH; + } + + if(gAgent.getRegion()) + { + gDebugInfo["CurrentSimHost"] = gAgent.getRegionHost().getHostName(); + gDebugInfo["CurrentRegion"] = gAgent.getRegion()->getName(); + } //Write out the crash status file //Use marker file style setup, as that's the simplest, especially since @@ -2170,7 +2207,14 @@ void LLAppViewer::handleViewerCrash() LLError::logToFile(""); // Remove the marker file, since otherwise we'll spawn a process that'll keep it locked - pApp->removeMarkerFile(); + if(gDebugInfo["LastExecEvent"].asInteger() == LAST_EXEC_LOGOUT_CRASH) + { + pApp->removeMarkerFile(true); + } + else + { + pApp->removeMarkerFile(false); + } // Call to pure virtual, handled by platform specifc llappviewer instance. pApp->handleCrashReporting(); @@ -2235,24 +2279,35 @@ void LLAppViewer::initMarkerFile() // These checks should also remove these files for the last 2 cases if they currently exist //LLError/Error checks. Only one of these should ever happen at a time. + LLString logout_marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, LOGOUT_MARKER_FILE_NAME); LLString llerror_marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, LLERROR_MARKER_FILE_NAME); LLString error_marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, ERROR_MARKER_FILE_NAME); - apr_file_t* fMarker = ll_apr_file_open(llerror_marker_file, LL_APR_RB); + + apr_file_t* fMarker = ll_apr_file_open(logout_marker_file, LL_APR_RB); + if(fMarker != NULL) + { + apr_file_close(fMarker); + llinfos << "Last exec LLError crashed, setting LastExecEvent to " << LAST_EXEC_LLERROR_CRASH << llendl; + gLastExecEvent = LAST_EXEC_LOGOUT_FROZE; + } + fMarker = ll_apr_file_open(llerror_marker_file, LL_APR_RB); if(fMarker != NULL) { apr_file_close(fMarker); llinfos << "Last exec LLError crashed, setting LastExecEvent to " << LAST_EXEC_LLERROR_CRASH << llendl; - gLastExecEvent = LAST_EXEC_LLERROR_CRASH; + if(gLastExecEvent == LAST_EXEC_LOGOUT_FROZE) gLastExecEvent = LAST_EXEC_LOGOUT_CRASH; + else gLastExecEvent = LAST_EXEC_LLERROR_CRASH; } - fMarker = ll_apr_file_open(error_marker_file, LL_APR_RB); if(fMarker != NULL) { apr_file_close(fMarker); llinfos << "Last exec crashed, setting LastExecEvent to " << LAST_EXEC_OTHER_CRASH << llendl; - gLastExecEvent = LAST_EXEC_OTHER_CRASH; + if(gLastExecEvent == LAST_EXEC_LOGOUT_FROZE) gLastExecEvent = LAST_EXEC_LOGOUT_CRASH; + else gLastExecEvent = LAST_EXEC_OTHER_CRASH; } + ll_apr_file_remove(logout_marker_file); ll_apr_file_remove(llerror_marker_file); ll_apr_file_remove(error_marker_file); @@ -2279,6 +2334,7 @@ void LLAppViewer::initMarkerFile() else { llinfos << "Failed to create marker file." << llendl; + return; } if (apr_file_lock(mMarkerFile, APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE) != APR_SUCCESS) { @@ -2291,7 +2347,7 @@ void LLAppViewer::initMarkerFile() llinfos << "Exiting initMarkerFile()." << llendl; } -void LLAppViewer::removeMarkerFile() +void LLAppViewer::removeMarkerFile(bool leave_logout_marker) { llinfos << "removeMarkerFile()" << llendl; if (mMarkerFile != NULL) @@ -2299,6 +2355,11 @@ void LLAppViewer::removeMarkerFile() ll_apr_file_remove( mMarkerFileName ); mMarkerFile = NULL; } + if (mLogoutMarkerFile != NULL && !leave_logout_marker) + { + ll_apr_file_remove( mLogoutMarkerFileName ); + mLogoutMarkerFile = NULL; + } } void LLAppViewer::forceQuit() @@ -3277,6 +3338,20 @@ void LLAppViewer::sendLogoutRequest() mLogoutRequestSent = TRUE; gVoiceClient->leaveChannel(); + + //Set internal status variables and marker files + gLogoutInProgress = TRUE; + mLogoutMarkerFileName = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,LOGOUT_MARKER_FILE_NAME); + mLogoutMarkerFile = ll_apr_file_open(mLogoutMarkerFileName, LL_APR_W); + if (mLogoutMarkerFile) + { + llinfos << "Created logout marker file " << mLogoutMarkerFileName << llendl; + } + else + { + llwarns << "Cannot create logout marker file " << mLogoutMarkerFileName << llendl; + } + apr_file_close(mLogoutMarkerFile); } } |
