summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Payne (Vir Linden) <vir@lindenlab.com>2016-05-06 16:29:34 -0400
committerBrad Payne (Vir Linden) <vir@lindenlab.com>2016-05-06 16:29:34 -0400
commitd69c01ba80f733ab04d9d5e9588033ad5764331f (patch)
treeebde0b385b464f853297344dc13d950c8d211803
parent2d8b53854ebc1db5cceda1e1b5d6abbbc6c08728 (diff)
parent7f5e6cea124e1193b199a3eabd50bdab96340c13 (diff)
merge
-rwxr-xr-xindra/llcommon/llapp.cpp6
-rwxr-xr-xindra/llcrashlogger/llcrashlogger.cpp242
-rwxr-xr-xindra/llcrashlogger/llcrashlogger.h5
-rwxr-xr-xindra/mac_crash_logger/llcrashloggermac.cpp9
-rwxr-xr-xindra/mac_crash_logger/mac_crash_logger.cpp6
-rwxr-xr-xindra/newview/CMakeLists.txt5
-rwxr-xr-xindra/newview/llappviewer.cpp18
-rwxr-xr-xindra/newview/llappviewermacosx.cpp5
-rw-r--r--indra/win_crash_logger/llcrashloggerwindows.cpp16
9 files changed, 149 insertions, 163 deletions
diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp
index 5a40845e7d..eb0699ad41 100755
--- a/indra/llcommon/llapp.cpp
+++ b/indra/llcommon/llapp.cpp
@@ -929,7 +929,7 @@ bool unix_minidump_callback(const google_breakpad::MinidumpDescriptor& minidump_
strncpy(path, minidump_desc.path(), remaining);
- LL_INFOS() << "generated minidump: " << LLApp::instance()->getMiniDumpFilename() << LL_ENDL;
+ LL_INFOS("CRASHREPORT") << "generated minidump: " << LLApp::instance()->getMiniDumpFilename() << LL_ENDL;
LLApp::runErrorHandler();
#ifndef LL_RELEASE_FOR_DOWNLOAD
@@ -975,7 +975,7 @@ bool unix_post_minidump_callback(const char *dump_dir,
strncpy(path, ".dmp", remaining);
}
- LL_INFOS() << "generated minidump: " << LLApp::instance()->getMiniDumpFilename() << LL_ENDL;
+ LL_INFOS("CRASHREPORT") << "generated minidump: " << LLApp::instance()->getMiniDumpFilename() << LL_ENDL;
LLApp::runErrorHandler();
#ifndef LL_RELEASE_FOR_DOWNLOAD
@@ -1019,7 +1019,7 @@ bool windows_post_minidump_callback(const wchar_t* dump_path,
strncpy(path, ".dmp", remaining);
}
- LL_INFOS() << "generated minidump: " << LLApp::instance()->getMiniDumpFilename() << LL_ENDL;
+ LL_INFOS("CRASHREPORT") << "generated minidump: " << LLApp::instance()->getMiniDumpFilename() << LL_ENDL;
// *NOTE:Mani - this code is stolen from LLApp, where its never actually used.
//OSMessageBox("Attach Debugger Now", "Error", OSMB_OK);
// *TODO: Translate the signals/exceptions into cross-platform stuff
diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp
index 3e08fb4cf3..69a806bbea 100755
--- a/indra/llcrashlogger/llcrashlogger.cpp
+++ b/indra/llcrashlogger/llcrashlogger.cpp
@@ -40,7 +40,6 @@
#include "lldir.h"
#include "llfile.h"
#include "llsdserialize.h"
-#include "llsdserialize.h"
#include "llproxy.h"
#include "llcorehttputil.h"
#include "llhttpsdhandler.h"
@@ -73,12 +72,15 @@ protected:
void LLCrashLoggerHandler::onSuccess(LLCore::HttpResponse * response, const LLSD &content)
{
+ LL_DEBUGS("CRASHREPORT") << "Request to " << response->getRequestURL() << "succeeded" << LL_ENDL;
gBreak = true;
gSent = true;
}
void LLCrashLoggerHandler::onFailure(LLCore::HttpResponse * response, LLCore::HttpStatus status)
{
+ LL_WARNS("CRASHREPORT") << "Request to " << response->getRequestURL()
+ << " failed: " << status.toString() << LL_ENDL;
gBreak = true;
}
@@ -150,18 +152,22 @@ std::string getStartupStateFromLog(std::string& sllog)
return startup_state;
}
-bool LLCrashLogger::readDebugFromXML(LLSD& dest, const std::string& filename )
+bool LLCrashLogger::readFromXML(LLSD& dest, const std::string& filename )
{
std::string db_file_name = gDirUtilp->getExpandedFilename(LL_PATH_DUMP,filename);
- std::ifstream debug_log_file(db_file_name.c_str());
+ std::ifstream log_file(db_file_name.c_str());
- // Look for it in the debug_info.log file
- if (debug_log_file.is_open())
+ // Look for it in the given file
+ if (log_file.is_open())
{
- LLSDSerialize::fromXML(dest, debug_log_file);
- debug_log_file.close();
+ LLSDSerialize::fromXML(dest, log_file);
+ log_file.close();
return true;
}
+ else
+ {
+ LL_WARNS("CRASHREPORT") << "Failed to open " << db_file_name << LL_ENDL;
+ }
return false;
}
@@ -194,6 +200,11 @@ bool LLCrashLogger::readMinidump(std::string minidump_path)
mCrashInfo["Minidump"] = data;
}
+ else
+ {
+ LL_WARNS("CRASHREPORT") << "failed to open minidump "<<minidump_path<<LL_ENDL;
+ }
+
return (length>0?true:false);
}
@@ -203,9 +214,16 @@ void LLCrashLogger::gatherFiles()
LLSD static_sd;
LLSD dynamic_sd;
+ //if we ever want to change the endpoint we send crashes to
+ //we can construct a file download ( a la feature table filename for example)
+ //containing the new endpoint
+ LLSD endpoint;
+ std::string grid;
+ std::string fqdn;
- bool has_logs = readDebugFromXML( static_sd, "static_debug_info.log" );
- has_logs |= readDebugFromXML( dynamic_sd, "dynamic_debug_info.log" );
+ bool has_logs = readFromXML( static_sd, "static_debug_info.log" );
+ has_logs |= readFromXML( dynamic_sd, "dynamic_debug_info.log" );
+
if ( has_logs )
{
@@ -215,6 +233,7 @@ void LLCrashLogger::gatherFiles()
mFileMap["SecondLifeLog"] = mDebugLog["SLLog"].asString();
mFileMap["SettingsXml"] = mDebugLog["SettingsFilename"].asString();
+ mFileMap["CrashHostUrl"] = loadCrashURLSetting();
if(mDebugLog.has("CAFilename"))
{
LLCore::HttpRequest::setStaticPolicyOption(LLCore::HttpRequest::PO_CA_FILE,
@@ -226,8 +245,8 @@ void LLCrashLogger::gatherFiles()
LLCore::HttpRequest::GLOBAL_POLICY_ID, gDirUtilp->getCAFile(), NULL);
}
- LL_INFOS() << "Using log file from debug log " << mFileMap["SecondLifeLog"] << LL_ENDL;
- LL_INFOS() << "Using settings file from debug log " << mFileMap["SettingsXml"] << LL_ENDL;
+ LL_INFOS("CRASHREPORT") << "Using log file from debug log " << mFileMap["SecondLifeLog"] << LL_ENDL;
+ LL_INFOS("CRASHREPORT") << "Using settings file from debug log " << mFileMap["SettingsXml"] << LL_ENDL;
}
else
{
@@ -246,31 +265,14 @@ 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"))
- {
- mCrashHost = "https://";
- mCrashHost += mDebugLog["CurrentSimHost"].asString();
- mCrashHost += ":12043/crash/report";
- }
- else if(mDebugLog.has("GridName"))
- {
- // This is a 'little' hacky, but its the best simple solution.
- std::string grid_host = mDebugLog["GridName"].asString();
- LLStringUtil::toLower(grid_host);
- mCrashHost = "https://login.";
- mCrashHost += grid_host;
- mCrashHost += ".lindenlab.com:12043/crash/report";
- }
+ if ( has_logs && (mFileMap["CrashHostUrl"] != "") )
+ {
+ mCrashHost = mFileMap["CrashHostUrl"];
+ }
- // Use login servers as the alternate, since they are already load balanced and have a known name
- mAltCrashHost = "https://login.agni.lindenlab.com:12043/crash/report";
+ //default to agni, per product
+ mAltCrashHost = "http://viewercrashreport.agni.lindenlab.com/cgi-bin/viewercrashreceiver.py";
mCrashInfo["DebugLog"] = mDebugLog;
mFileMap["StatsLog"] = gDirUtilp->getExpandedFilename(LL_PATH_DUMP,"stats.log");
@@ -279,26 +281,37 @@ void LLCrashLogger::gatherFiles()
for(std::map<std::string, std::string>::iterator itr = mFileMap.begin(); itr != mFileMap.end(); ++itr)
{
- std::ifstream f((*itr).second.c_str());
- if(!f.is_open())
- {
- LL_INFOS("CRASHREPORT") << "Can't find file " << (*itr).second << LL_ENDL;
- continue;
- }
- std::stringstream s;
- s << f.rdbuf();
+ std::string file = (*itr).second;
+ if (!file.empty())
+ {
+ LL_DEBUGS("CRASHREPORT") << "trying to read " << itr->first << ": " << file << LL_ENDL;
+ std::ifstream f(file.c_str());
+ if(f.is_open())
+ {
+ std::stringstream s;
+ s << f.rdbuf();
- std::string crash_info = s.str();
- if(itr->first == "SecondLifeLog")
- {
- if(!mCrashInfo["DebugLog"].has("StartupState"))
- {
- mCrashInfo["DebugLog"]["StartupState"] = getStartupStateFromLog(crash_info);
- }
- trimSLLog(crash_info);
- }
+ std::string crash_info = s.str();
+ if(itr->first == "SecondLifeLog")
+ {
+ if(!mCrashInfo["DebugLog"].has("StartupState"))
+ {
+ mCrashInfo["DebugLog"]["StartupState"] = getStartupStateFromLog(crash_info);
+ }
+ trimSLLog(crash_info);
+ }
- mCrashInfo[(*itr).first] = LLStringFn::strip_invalid_xml(rawstr_to_utf8(crash_info));
+ mCrashInfo[(*itr).first] = LLStringFn::strip_invalid_xml(rawstr_to_utf8(crash_info));
+ }
+ else
+ {
+ LL_WARNS("CRASHREPORT") << "Failed to open file " << file << LL_ENDL;
+ }
+ }
+ else
+ {
+ LL_DEBUGS("CRASHREPORT") << "empty file in list for " << itr->first << LL_ENDL;
+ }
}
std::string minidump_path;
@@ -308,20 +321,21 @@ void LLCrashLogger::gatherFiles()
if (has_minidump)
{
minidump_path = mDebugLog["MinidumpPath"].asString();
- }
-
- if (has_minidump)
- {
has_minidump = readMinidump(minidump_path);
}
+ else
+ {
+ LL_WARNS("CRASHREPORT") << "DebugLog does not have MinidumpPath" << LL_ENDL;
+ }
if (!has_minidump) //Viewer was probably so hosed it couldn't write remaining data. Try brute force.
{
- //Look for a filename at least 30 characters long in the dump dir which contains the characters MDMP as the first 4 characters in the file.
+ //Look for a filename at least 30 characters long in the dump dir which contains the characters MDMP as the first 4 characters in the file.
typedef std::vector<std::string> vec;
std::string pathname = gDirUtilp->getExpandedFilename(LL_PATH_DUMP,"");
+ LL_WARNS("CRASHREPORT") << "Searching for minidump in " << pathname << LL_ENDL;
vec file_vec = gDirUtilp->getFilesInDir(pathname);
- for(vec::const_iterator iter=file_vec.begin(); iter!=file_vec.end(); ++iter)
+ for(vec::const_iterator iter=file_vec.begin(); !has_minidump && iter!=file_vec.end(); ++iter)
{
if ( ( iter->length() > 30 ) && (iter->rfind(".dmp") == (iter->length()-4) ) )
{
@@ -337,15 +351,27 @@ void LLCrashLogger::gatherFiles()
minidump_path = *iter;
has_minidump = readMinidump(fullname);
mDebugLog["MinidumpPath"] = fullname;
- if (has_minidump)
- {
- break;
- }
+ }
+ else
+ {
+ LL_DEBUGS("CRASHREPORT") << "MDMP not found in " << fullname << LL_ENDL;
}
}
+ else
+ {
+ LL_DEBUGS("CRASHREPORT") << "failed to open " << fullname << LL_ENDL;
+ }
}
+ else
+ {
+ LL_DEBUGS("CRASHREPORT") << "Name does not match minidump name pattern " << *iter << LL_ENDL;
+ }
}
}
+ else
+ {
+ LL_WARNS("CRASHREPORT") << "readMinidump returned no minidump" << LL_ENDL;
+ }
}
LLSD LLCrashLogger::constructPostData()
@@ -355,8 +381,9 @@ LLSD LLCrashLogger::constructPostData()
const char* const CRASH_SETTINGS_FILE = "settings_crash_behavior.xml";
-S32 LLCrashLogger::loadCrashBehaviorSetting()
+std::string LLCrashLogger::loadCrashURLSetting()
{
+
// First check user_settings (in the user's home dir)
std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
if (! mCrashSettings.loadFromFile(filename))
@@ -366,38 +393,14 @@ S32 LLCrashLogger::loadCrashBehaviorSetting()
mCrashSettings.loadFromFile(filename);
}
- // If we didn't load any files above, this will return the default
- S32 value = mCrashSettings.getS32("CrashSubmitBehavior");
-
- // Whatever value we got, make sure it's valid
- switch (value)
- {
- case CRASH_BEHAVIOR_NEVER_SEND:
- return CRASH_BEHAVIOR_NEVER_SEND;
- case CRASH_BEHAVIOR_ALWAYS_SEND:
- return CRASH_BEHAVIOR_ALWAYS_SEND;
- }
-
- return CRASH_BEHAVIOR_ASK;
-}
-
-bool LLCrashLogger::saveCrashBehaviorSetting(S32 crash_behavior)
-{
- switch (crash_behavior)
- {
- case CRASH_BEHAVIOR_ASK:
- case CRASH_BEHAVIOR_NEVER_SEND:
- case CRASH_BEHAVIOR_ALWAYS_SEND:
- break;
- default:
- return false;
- }
-
- mCrashSettings.setS32("CrashSubmitBehavior", crash_behavior);
- std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
- mCrashSettings.saveToFile(filename, FALSE);
-
- return true;
+ if (! mCrashSettings.controlExists("CrashHostUrl"))
+ {
+ return "";
+ }
+ else
+ {
+ return mCrashSettings.getString("CrashHostUrl");
+ }
}
bool LLCrashLogger::runCrashLogPost(std::string host, LLSD data, std::string msg, int retries, int timeout)
@@ -405,13 +408,13 @@ bool LLCrashLogger::runCrashLogPost(std::string host, LLSD data, std::string msg
LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest);
LLCore::HttpOptions::ptr_t httpOpts(new LLCore::HttpOptions);
- gBreak = false;
httpOpts->setTimeout(timeout);
for(int i = 0; i < retries; ++i)
{
updateApplication(llformat("%s, try %d...", msg.c_str(), i+1));
+ LL_INFOS("CRASHREPORT") << "POST crash data to " << host << LL_ENDL;
LLCore::HttpHandle handle = LLCoreHttpUtil::requestPostWithLLSD(httpRequest.get(), LLCore::HttpRequest::DEFAULT_POLICY_ID, 0,
host, data, httpOpts, LLCore::HttpHeaders::ptr_t(), LLCore::HttpHandler::ptr_t(new LLCrashLoggerHandler));
@@ -424,10 +427,11 @@ bool LLCrashLogger::runCrashLogPost(std::string host, LLSD data, std::string msg
}
while(!gBreak)
- {
- updateApplication(); // No new message, just pump the IO
+ {
+ ms_sleep(250);
+ updateApplication(); // No new message, just pump the IO
httpRequest->update(0L);
- }
+ }
if(gSent)
{
return gSent;
@@ -440,12 +444,15 @@ bool LLCrashLogger::runCrashLogPost(std::string host, LLSD data, std::string msg
bool LLCrashLogger::sendCrashLog(std::string dump_dir)
{
+
gDirUtilp->setDumpDir( dump_dir );
std::string dump_path = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
"SecondLifeCrashReport");
std::string report_file = dump_path + ".log";
-
+
+ LL_DEBUGS("CRASHREPORT") << "sending " << report_file << LL_ENDL;
+
gatherFiles();
LLSD post_data;
@@ -455,19 +462,26 @@ bool LLCrashLogger::sendCrashLog(std::string dump_dir)
std::ofstream out_file(report_file.c_str());
LLSDSerialize::toPrettyXML(post_data, out_file);
+ out_file.flush();
out_file.close();
bool sent = false;
- //*TODO: Translate
- if(mCrashHost != "")
+ if(mCrashHost != "")
{
+ LL_WARNS("CRASHREPORT") << "Sending crash data to server from CrashHostUrl '" << mCrashHost << "'" << LL_ENDL;
+
+ std::string msg = "Using override crash server... ";
+ msg = msg+mCrashHost.c_str();
+ updateApplication(msg.c_str());
+
sent = runCrashLogPost(mCrashHost, post_data, std::string("Sending to server"), CRASH_UPLOAD_RETRIES, CRASH_UPLOAD_TIMEOUT);
}
if(!sent)
{
- sent = runCrashLogPost(mAltCrashHost, post_data, std::string("Sending to alternate server"), CRASH_UPLOAD_RETRIES, CRASH_UPLOAD_TIMEOUT);
+ updateApplication("Using default server...");
+ sent = runCrashLogPost(mAltCrashHost, post_data, std::string("Sending to default server"), CRASH_UPLOAD_RETRIES, CRASH_UPLOAD_TIMEOUT);
}
mSentCrashLogs = sent;
@@ -477,8 +491,6 @@ bool LLCrashLogger::sendCrashLog(std::string dump_dir)
bool LLCrashLogger::sendCrashLogs()
{
-
- //pertinent code from below moved into a subroutine.
LLSD locks = mKeyMaster.getProcessList();
LLSD newlocks = LLSD::emptyArray();
@@ -517,8 +529,6 @@ bool LLCrashLogger::sendCrashLogs()
}
else
{
- //mCrashInfo["DebugLog"].erase("MinidumpPath");
-
mKeyMaster.cleanupProcess((*lock)["dumpdir"].asString());
}
}
@@ -526,7 +536,7 @@ bool LLCrashLogger::sendCrashLogs()
}
else
{
- LL_WARNS() << "Discarding corrupted entry from lock table." << LL_ENDL;
+ LL_INFOS() << "Discarding corrupted entry from lock table." << LL_ENDL;
}
}
}
@@ -542,11 +552,13 @@ bool LLCrashLogger::sendCrashLogs()
void LLCrashLogger::updateApplication(const std::string& message)
{
- if (!message.empty()) LL_INFOS() << message << LL_ENDL;
+ if (!message.empty()) LL_INFOS("CRASHREPORT") << message << LL_ENDL;
}
bool LLCrashLogger::init()
{
+ LL_DEBUGS("CRASHREPORT") << LL_ENDL;
+
LLCore::LLHttp::initialize();
// We assume that all the logs we're looking for reside on the current drive
@@ -570,6 +582,8 @@ bool LLCrashLogger::init()
// Set the log file to crashreport.log
LLError::logToFile(log_file); //NOTE: Until this line, LL_INFOS LL_WARNS, etc are blown to the ether.
+ LL_INFOS("CRASHREPORT") << "Crash reporter file rotation complete." << LL_ENDL;
+
// Handle locking
bool locked = mKeyMaster.requestMaster(); //Request master locking file. wait time is defaulted to 300S
@@ -596,16 +610,6 @@ bool LLCrashLogger::init()
"1 = always send crash report, "
"2 = never send crash report)");
- // LL_INFOS() << "Loading crash behavior setting" << LL_ENDL;
- // mCrashBehavior = loadCrashBehaviorSetting();
-
- // If user doesn't want to send, bail out
- if (mCrashBehavior == CRASH_BEHAVIOR_NEVER_SEND)
- {
- LL_INFOS() << "Crash behavior is never_send, quitting" << LL_ENDL;
- return false;
- }
-
init_curl();
LLCore::HttpRequest::createService();
LLCore::HttpRequest::startThread();
diff --git a/indra/llcrashlogger/llcrashlogger.h b/indra/llcrashlogger/llcrashlogger.h
index f5383daefc..8b4afae24a 100755
--- a/indra/llcrashlogger/llcrashlogger.h
+++ b/indra/llcrashlogger/llcrashlogger.h
@@ -46,13 +46,12 @@ class LLCrashLogger : public LLApp
public:
LLCrashLogger();
virtual ~LLCrashLogger();
- S32 loadCrashBehaviorSetting();
- bool readDebugFromXML(LLSD& dest, const std::string& filename );
+ std::string loadCrashURLSetting();
+ bool readFromXML(LLSD& dest, const std::string& filename );
void gatherFiles();
void mergeLogs( LLSD src_sd );
virtual void gatherPlatformSpecificFiles() {}
- bool saveCrashBehaviorSetting(S32 crash_behavior);
bool sendCrashLog(std::string dump_dir);
bool sendCrashLogs();
LLSD constructPostData();
diff --git a/indra/mac_crash_logger/llcrashloggermac.cpp b/indra/mac_crash_logger/llcrashloggermac.cpp
index 351009814d..3149fad6e8 100755
--- a/indra/mac_crash_logger/llcrashloggermac.cpp
+++ b/indra/mac_crash_logger/llcrashloggermac.cpp
@@ -66,22 +66,19 @@ void LLCrashLoggerMac::gatherPlatformSpecificFiles()
bool LLCrashLoggerMac::mainLoop()
{
+
if (mCrashBehavior == CRASH_BEHAVIOR_ALWAYS_SEND)
{
gSendReport = true;
}
- if(gRememberChoice)
- {
- if(gSendReport) saveCrashBehaviorSetting(CRASH_BEHAVIOR_ALWAYS_SEND);
- else saveCrashBehaviorSetting(CRASH_BEHAVIOR_NEVER_SEND);
- }
-
if(gSendReport)
{
setUserText(gUserNotes);
sendCrashLogs();
}
+
+ LL_INFOS() << "Sending of logs complete" << LL_ENDL;
return true;
}
diff --git a/indra/mac_crash_logger/mac_crash_logger.cpp b/indra/mac_crash_logger/mac_crash_logger.cpp
index d6b913829e..95d4e65207 100755
--- a/indra/mac_crash_logger/mac_crash_logger.cpp
+++ b/indra/mac_crash_logger/mac_crash_logger.cpp
@@ -39,16 +39,12 @@ int main(int argc, char **argv)
LLSD options = LLApp::instance()->getOptionData(
LLApp::PRIORITY_COMMAND_LINE);
- if (!(options.has("pid") && options.has("dumpdir")))
- {
- llwarns << "Insufficient parameters to crash report." << llendl;
- }
-
if (! app.init())
{
LL_WARNS() << "Unable to initialize application." << LL_ENDL;
return 1;
}
+
if (app.getCrashBehavior() != CRASH_BEHAVIOR_ALWAYS_SEND)
{
// return NSApplicationMain(argc, (const char **)argv);
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 6eaa1ae9dd..3a00c200e9 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -2172,7 +2172,10 @@ if (PACKAGE)
VERBATIM)
add_custom_target(generate_breakpad_symbols DEPENDS "${VIEWER_SYMBOL_FILE}")
- add_dependencies(generate_breakpad_symbols "${VIEWER_BINARY_NAME}" "${VIEWER_COPY_MANIFEST}")
+ add_dependencies(generate_breakpad_symbols "${VIEWER_BINARY_NAME}")
+ if (WINDOWS OR LINUX)
+ add_dependencies(generate_breakpad_symbols "${VIEWER_COPY_MANIFEST}")
+ endif (WINDOWS OR LINUX)
add_dependencies(llpackage generate_breakpad_symbols)
endif(RELEASE_CRASH_REPORTING OR NON_RELEASE_CRASH_REPORTING)
endif (PACKAGE)
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index cbc1169934..9c841d67d0 100755
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -3619,9 +3619,9 @@ void getFileList()
void LLAppViewer::handleViewerCrash()
{
- LL_INFOS() << "Handle viewer crash entry." << LL_ENDL;
+ LL_INFOS("CRASHREPORT") << "Handle viewer crash entry." << LL_ENDL;
- LL_INFOS() << "Last render pool type: " << LLPipeline::sCurRenderPoolType << LL_ENDL ;
+ LL_INFOS("CRASHREPORT") << "Last render pool type: " << LLPipeline::sCurRenderPoolType << LL_ENDL ;
LLMemory::logMemoryInfo(true) ;
@@ -3729,30 +3729,36 @@ void LLAppViewer::handleViewerCrash()
#endif
char *minidump_file = pApp->getMiniDumpFilename();
-
+ LL_DEBUGS("CRASHREPORT") << "minidump file name " << minidump_file << LL_ENDL;
if(minidump_file && minidump_file[0] != 0)
{
gDebugInfo["Dynamic"]["MinidumpPath"] = minidump_file;
}
-#ifdef LL_WINDOWS
else
{
+#ifdef LL_WINDOWS
getFileList();
+#else
+ LL_WARNS("CRASHREPORT") << "no minidump file?" << LL_ENDL;
+#endif
}
-#endif
gDebugInfo["Dynamic"]["CrashType"]="crash";
if (gMessageSystem && gDirUtilp)
{
std::string filename;
filename = gDirUtilp->getExpandedFilename(LL_PATH_DUMP, "stats.log");
+ LL_DEBUGS("CRASHREPORT") << "recording stats " << filename << LL_ENDL;
llofstream file(filename.c_str(), std::ios_base::binary);
if(file.good())
{
- LL_INFOS() << "Handle viewer crash generating stats log." << LL_ENDL;
gMessageSystem->summarizeLogs(file);
file.close();
}
+ else
+ {
+ LL_WARNS("CRASHREPORT") << "problem recording stats" << LL_ENDL;
+ }
}
if (gMessageSystem)
diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp
index 09227806fd..ca219fda59 100755
--- a/indra/newview/llappviewermacosx.cpp
+++ b/indra/newview/llappviewermacosx.cpp
@@ -83,10 +83,6 @@ static void exceptionTerminateHandler()
bool initViewer()
{
-#if LL_SOLARIS && defined(__sparc)
- asm ("ta\t6"); // NOTE: Make sure memory alignment is enforced on SPARC
-#endif
-
// Set the working dir to <bundle>/Contents/Resources
if (chdir(gDirUtilp->getAppRODataDir().c_str()) == -1)
{
@@ -301,6 +297,7 @@ void LLAppViewerMacOSX::initCrashReporting(bool reportFreeze)
std::string appname = gDirUtilp->getExecutableFilename();
std::string str[] = { "-pid", pid_str.str(), "-dumpdir", logdir, "-procname", appname.c_str() };
std::vector< std::string > args( str, str + ( sizeof ( str ) / sizeof ( std::string ) ) );
+ LL_WARNS() << "about to launch mac-crash-logger" << pid_str << " " << logdir << " " << appname << LL_ENDL;
launchApplication(&command_str, &args);
}
diff --git a/indra/win_crash_logger/llcrashloggerwindows.cpp b/indra/win_crash_logger/llcrashloggerwindows.cpp
index 51e70f95b6..23c29e6b18 100644
--- a/indra/win_crash_logger/llcrashloggerwindows.cpp
+++ b/indra/win_crash_logger/llcrashloggerwindows.cpp
@@ -171,22 +171,6 @@ bool handle_button_click(WORD button_id)
return false;
}
- // See if "do this next time" is checked and save state
- S32 crash_behavior = CRASH_BEHAVIOR_ASK;
- LRESULT result = SendDlgItemMessage(gHwndReport, IDC_CHECK_AUTO, BM_GETCHECK, 0, 0);
- if (result == BST_CHECKED)
- {
- if (button_id == IDOK)
- {
- crash_behavior = CRASH_BEHAVIOR_ALWAYS_SEND;
- }
- else if (button_id == IDCANCEL)
- {
- crash_behavior = CRASH_BEHAVIOR_NEVER_SEND;
- }
- ((LLCrashLoggerWindows*)LLCrashLogger::instance())->saveCrashBehaviorSetting(crash_behavior);
- }
-
// We're done with this dialog.
gFirstDialog = FALSE;