summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPalmer <palmer@lindenlab.com>2010-03-23 13:29:40 -0700
committerPalmer <palmer@lindenlab.com>2010-03-23 13:29:40 -0700
commitd1eb1310793f20eda065fe788fdb4b833c057823 (patch)
tree5938d049efb76e5aa83c1955f3c03b332e347563
parent6397be73673d886680705b9f88ca9b9978dd457f (diff)
Fix for crash logger crashing. bleh!
Reviewed by DaveP
-rwxr-xr-x[-rw-r--r--]indra/llcrashlogger/llcrashlogger.cpp93
1 files changed, 48 insertions, 45 deletions
diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp
index 2152feaf80..4bda00ed86 100644..100755
--- a/indra/llcrashlogger/llcrashlogger.cpp
+++ b/indra/llcrashlogger/llcrashlogger.cpp
@@ -2,25 +2,31 @@
* @file llcrashlogger.cpp
* @brief Crash logger implementation
*
-* $LicenseInfo:firstyear=2003&license=viewerlgpl$
-* Second Life Viewer Source Code
-* Copyright (C) 2010, Linden Research, Inc.
+* $LicenseInfo:firstyear=2003&license=viewergpl$
+*
+* Copyright (c) 2003-2009, Linden Research, Inc.
*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation;
-* version 2.1 of the License only.
+* Second Life Viewer Source Code
+* The source code in this file ("Source Code") is provided by Linden Lab
+* to you under the terms of the GNU General Public License, version 2.0
+* ("GPL"), unless you have obtained a separate licensing agreement
+* ("Other License"), formally executed by you and Linden Lab. Terms of
+* the GPL can be found in doc/GPL-license.txt in this distribution, or
+* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
+* There are special exceptions to the terms and conditions of the GPL as
+* it is applied to this Source Code. View the full text of the exception
+* in the file doc/FLOSS-exception.txt in this software distribution, or
+* online at
+* http://secondlifegrid.net/programs/open_source/licensing/flossexception
*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+* By copying, modifying or distributing this software, you acknowledge
+* that you have read and understood your obligations described above,
+* and agree to abide by those obligations.
*
-* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+* COMPLETENESS OR PERFORMANCE.
* $/LicenseInfo$
*/
#include <cstdio>
@@ -149,6 +155,25 @@ std::string getStartupStateFromLog(std::string& sllog)
void LLCrashLogger::gatherFiles()
{
+
+ /*
+ //TODO:This function needs to be reimplemented somewhere in here...
+ if(!previous_crash && is_crash_log)
+ {
+ // Make sure the file isn't too old.
+ double age = difftime(gLaunchTime, stat_data.st_mtimespec.tv_sec);
+
+ // llinfos << "age is " << age << llendl;
+
+ if(age > 60.0)
+ {
+ // The file was last modified more than 60 seconds before the crash reporter was launched. Assume it's stale.
+ llwarns << "File " << mFilename << " is too old!" << llendl;
+ return;
+ }
+ }
+ */
+
updateApplication("Gathering logs...");
// Figure out the filename of the debug log
@@ -184,9 +209,11 @@ void LLCrashLogger::gatherFiles()
mFileMap["SettingsXml"] = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,"settings.xml");
}
+#if !LL_DARWIN
if(mCrashInPreviousExec)
+#else
+#endif
{
- // Restarting after freeze.
// Replace the log file ext with .old, since the
// instance that launched this process has overwritten
// SecondLife.log
@@ -198,12 +225,7 @@ void LLCrashLogger::gatherFiles()
gatherPlatformSpecificFiles();
//Use the debug log to reconstruct the URL to send the crash report to
- if(mDebugLog.has("CrashHostUrl"))
- {
- // Crash log receiver has been manually configured.
- mCrashHost = mDebugLog["CrashHostUrl"].asString();
- }
- else if(mDebugLog.has("CurrentSimHost"))
+ if(mDebugLog.has("CurrentSimHost"))
{
mCrashHost = "https://";
mCrashHost += mDebugLog["CurrentSimHost"].asString();
@@ -225,6 +247,7 @@ void LLCrashLogger::gatherFiles()
mCrashInfo["DebugLog"] = mDebugLog;
mFileMap["StatsLog"] = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stats.log");
+ mFileMap["StackTrace"] = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log");
updateApplication("Encoding files...");
@@ -249,30 +272,8 @@ void LLCrashLogger::gatherFiles()
trimSLLog(crash_info);
}
- mCrashInfo[(*itr).first] = LLStringFn::strip_invalid_xml(rawstr_to_utf8(crash_info));
+ mCrashInfo[(*itr).first] = rawstr_to_utf8(crash_info);
}
-
- // Add minidump as binary.
- std::string minidump_path = mDebugLog["MinidumpPath"];
- if(minidump_path != "")
- {
- std::ifstream minidump_stream(minidump_path.c_str(), std::ios_base::in | std::ios_base::binary);
- if(minidump_stream.is_open())
- {
- minidump_stream.seekg(0, std::ios::end);
- size_t length = minidump_stream.tellg();
- minidump_stream.seekg(0, std::ios::beg);
-
- LLSD::Binary data;
- data.resize(length);
-
- minidump_stream.read(reinterpret_cast<char *>(&(data[0])),length);
- minidump_stream.close();
-
- mCrashInfo["Minidump"] = data;
- }
- }
- mCrashInfo["DebugLog"].erase("MinidumpPath");
}
LLSD LLCrashLogger::constructPostData()
@@ -369,6 +370,8 @@ void LLCrashLogger::updateApplication(const std::string& message)
bool LLCrashLogger::init()
{
+ LLCurl::initClass();
+
// We assume that all the logs we're looking for reside on the current drive
gDirUtilp->initAppDirs("SecondLife");