From b09f0a120e53c8b27d196df6a33a42c9ac0e146c Mon Sep 17 00:00:00 2001 From: Glenn Glazer Date: Wed, 16 Sep 2015 14:21:03 -0700 Subject: [PATCH 01/10] maint-5422 changes and merge from release --- indra/llcrashlogger/llcrashlogger.cpp | 179 ++++++++------------ indra/llcrashlogger/llcrashlogger.h | 2 +- indra/mac_crash_logger/llcrashloggermac.cpp | 3 + indra/mac_crash_logger/mac_crash_logger.cpp | 11 +- indra/newview/llappviewermacosx.cpp | 5 +- 5 files changed, 84 insertions(+), 116 deletions(-) diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp index 7a97c16ea7..b1cf20cc8e 100755 --- a/indra/llcrashlogger/llcrashlogger.cpp +++ b/indra/llcrashlogger/llcrashlogger.cpp @@ -39,12 +39,14 @@ #include "lltimer.h" #include "lldir.h" #include "llfile.h" -#include "llsdserialize.h" #include "lliopipe.h" #include "llpumpio.h" #include "llhttpclient.h" #include "llsdserialize.h" #include "llproxy.h" +#include "llsdutil.h" //remove + +#include LLPumpIO* gServicePump = NULL; BOOL gBreak = false; @@ -140,16 +142,16 @@ 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; } return false; @@ -193,9 +195,18 @@ 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" ); + bool has_endpoint = readFromXML( endpoint, "endpoint.xml" ); + if ( has_logs ) { @@ -233,31 +244,41 @@ 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_endpoint && endpoint.has("ViewerCrashReceiver" ) ) + { + mCrashHost = endpoint["ViewerCrashReceiver"].asString(); + } + else if ( has_logs ) + { + //Use the debug log to reconstruct the URL to send the crash report to + if(mDebugLog.has("CurrentSimHost")) + { + mCrashHost = "http://viewercrashreport"; + fqdn = mDebugLog["CurrentSimHost"].asString(); + boost::regex sim_re( "sim[[:digit:]]+.[[:alpha:]]+.lindenlab.com" ); + boost::match_results results; + if ( regex_match( fqdn, sim_re ) ) + { + boost::regex regex_delimited("\\.[[:alpha:]]+\\."); + boost::match_flag_type flags = boost::match_default; + std::string::const_iterator start = fqdn.begin(); + std::string::const_iterator end = fqdn.end(); + boost::regex_search(start, end, results, regex_delimited, flags); + grid = std::string(results[0].first, results[0].second); + mCrashHost += grid; + mCrashHost += "lindenlab.com/cgi-bin/viewercrashreceiver.py"; + } + else + { + mCrashHost = ""; + } - // 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"); @@ -389,15 +410,15 @@ bool LLCrashLogger::saveCrashBehaviorSetting(S32 crash_behavior) bool LLCrashLogger::runCrashLogPost(std::string host, LLSD data, std::string msg, int retries, int timeout) { - gBreak = false; for(int i = 0; i < retries; ++i) { updateApplication(llformat("%s, try %d...", msg.c_str(), i+1)); LLHTTPClient::post(host, data, new LLCrashLoggerResponder(), timeout); - while(!gBreak) - { - updateApplication(); // No new message, just pump the IO - } + while(!gBreak) + { + ms_sleep(250); + updateApplication(); // No new message, just pump the IO + } if(gSent) { return gSent; @@ -408,12 +429,13 @@ 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"; - + gatherFiles(); LLSD post_data; @@ -423,18 +445,24 @@ 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 != "") - { + { + std::string msg = "Using derived crash server... "; + msg = msg+mCrashHost.c_str(); + updateApplication(msg.c_str()); + sent = runCrashLogPost(mCrashHost, post_data, std::string("Sending to server"), 3, 5); } if(!sent) { + updateApplication("Using alternate (default) server..."); sent = runCrashLogPost(mAltCrashHost, post_data, std::string("Sending to alternate server"), 3, 5); } @@ -446,65 +474,22 @@ 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(); - LLSD opts = getOptionData(PRIORITY_COMMAND_LINE); LLSD rec; - if ( opts.has("pid") && opts.has("dumpdir") && opts.has("procname") ) + if ( opts.has("dumpdir") ) { rec["pid"]=opts["pid"]; rec["dumpdir"]=opts["dumpdir"]; rec["procname"]=opts["procname"]; } - - if (locks.isArray()) + else { - for (LLSD::array_iterator lock=locks.beginArray(); - lock !=locks.endArray(); - ++lock) - { - if ( (*lock).has("pid") && (*lock).has("dumpdir") && (*lock).has("procname") ) - { - if ( mKeyMaster.isProcessAlive( (*lock)["pid"].asInteger(), (*lock)["procname"].asString() ) ) - { - newlocks.append(*lock); - } - else - { - //TODO: This is a hack but I didn't want to include boost in another file or retest everything related to lldir - if (LLCrashLock::fileExists((*lock)["dumpdir"].asString())) - { - //the viewer cleans up the log directory on clean shutdown - //but is ignorant of the locking table. - if (!sendCrashLog((*lock)["dumpdir"].asString())) - { - newlocks.append(*lock); //Failed to send log so don't delete it. - } - else - { - //mCrashInfo["DebugLog"].erase("MinidumpPath"); + return false; + } - mKeyMaster.cleanupProcess((*lock)["dumpdir"].asString()); - } - } - } - } - else - { - LL_WARNS() << "Discarding corrupted entry from lock table." << LL_ENDL; - } - } - } + return sendCrashLog(rec["dumpdir"].asString()); - if (rec) - { - newlocks.append(rec); - } - - mKeyMaster.putProcessList(newlocks); return true; } @@ -540,25 +525,7 @@ 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. - // Handle locking - bool locked = mKeyMaster.requestMaster(); //Request master locking file. wait time is defaulted to 300S - - while (!locked && mKeyMaster.isWaiting()) - { - LL_INFOS("CRASHREPORT") << "Waiting for lock." << LL_ENDL; -#if LL_WINDOWS - Sleep(1000); -#else - sleep(1); -#endif - locked = mKeyMaster.checkMaster(); - } - - if (!locked) - { - LL_WARNS("CRASHREPORT") << "Unable to get master lock. Another crash reporter may be hung." << LL_ENDL; - return false; - } + LL_INFOS() << "Crash reporter file rotation complete." << LL_ENDL; mCrashSettings.declareS32("CrashSubmitBehavior", CRASH_BEHAVIOR_ALWAYS_SEND, "Controls behavior when viewer crashes " diff --git a/indra/llcrashlogger/llcrashlogger.h b/indra/llcrashlogger/llcrashlogger.h index a06bf1d6ac..b8a007f2be 100755 --- a/indra/llcrashlogger/llcrashlogger.h +++ b/indra/llcrashlogger/llcrashlogger.h @@ -46,7 +46,7 @@ public: LLCrashLogger(); virtual ~LLCrashLogger(); S32 loadCrashBehaviorSetting(); - bool readDebugFromXML(LLSD& dest, const std::string& filename ); + bool readFromXML(LLSD& dest, const std::string& filename ); void gatherFiles(); void mergeLogs( LLSD src_sd ); diff --git a/indra/mac_crash_logger/llcrashloggermac.cpp b/indra/mac_crash_logger/llcrashloggermac.cpp index 351009814d..ed64ebdb8c 100755 --- a/indra/mac_crash_logger/llcrashloggermac.cpp +++ b/indra/mac_crash_logger/llcrashloggermac.cpp @@ -66,6 +66,7 @@ void LLCrashLoggerMac::gatherPlatformSpecificFiles() bool LLCrashLoggerMac::mainLoop() { + if (mCrashBehavior == CRASH_BEHAVIOR_ALWAYS_SEND) { gSendReport = true; @@ -82,6 +83,8 @@ bool LLCrashLoggerMac::mainLoop() 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..72f4ede999 100755 --- a/indra/mac_crash_logger/mac_crash_logger.cpp +++ b/indra/mac_crash_logger/mac_crash_logger.cpp @@ -39,16 +39,17 @@ 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 (!(options.has("pid") && options.has("dumpdir"))) + { + LL_WARNS() << "Insufficient parameters to crash report." << llendl; + } + if (app.getCrashBehavior() != CRASH_BEHAVIOR_ALWAYS_SEND) { // return NSApplicationMain(argc, (const char **)argv); diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp index 56154a2de3..b85f3249bf 100755 --- a/indra/newview/llappviewermacosx.cpp +++ b/indra/newview/llappviewermacosx.cpp @@ -82,10 +82,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 /Contents/Resources if (chdir(gDirUtilp->getAppRODataDir().c_str()) == -1) { @@ -296,6 +292,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); } From cc79b5663f479895f121c07f3797ea276c844a94 Mon Sep 17 00:00:00 2001 From: Glenn Glazer Date: Wed, 16 Dec 2015 14:45:03 -0800 Subject: [PATCH 02/10] MAINT-5974: change URL creation --- indra/llcrashlogger/llcrashlogger.cpp | 36 +++++++++++---------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp index 7a97c16ea7..0c5bbf2fdf 100755 --- a/indra/llcrashlogger/llcrashlogger.cpp +++ b/indra/llcrashlogger/llcrashlogger.cpp @@ -233,31 +233,23 @@ 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); + //Construct crash report URL + //CNAMES for the VIPs are viewercrashreport.{agni, damballah}.lindenlab.com + std::string grid = mDebugLog["GridName"].asString(); + LLStringUtil::toLower(grid); + if(grid == "agni") + { + mCrashHost = "https://viewercrashreport.agni.lindenlab.com/cgi-bin/viewercrashreceiver.py"; + + } + else + { + mCrashHost = "https://viewercrashreport.damballah.lindenlab.com/cgi-bin/viewercrashreceiver.py"; + } - mCrashHost = "https://login."; - mCrashHost += grid_host; - mCrashHost += ".lindenlab.com:12043/crash/report"; - } // 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"; + mAltCrashHost = mCrashHost; mCrashInfo["DebugLog"] = mDebugLog; mFileMap["StatsLog"] = gDirUtilp->getExpandedFilename(LL_PATH_DUMP,"stats.log"); From 281521fe42facc08c00ea6df902e31a6749d6eea Mon Sep 17 00:00:00 2001 From: Glenn Glazer Date: Thu, 25 Feb 2016 10:28:38 -0800 Subject: [PATCH 03/10] rollback hardcoded version --- indra/llcrashlogger/llcrashlogger.cpp | 36 ++++++++++++++++----------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp index 0c5bbf2fdf..7a97c16ea7 100755 --- a/indra/llcrashlogger/llcrashlogger.cpp +++ b/indra/llcrashlogger/llcrashlogger.cpp @@ -233,23 +233,31 @@ void LLCrashLogger::gatherFiles() gatherPlatformSpecificFiles(); - //Construct crash report URL - //CNAMES for the VIPs are viewercrashreport.{agni, damballah}.lindenlab.com - std::string grid = mDebugLog["GridName"].asString(); - LLStringUtil::toLower(grid); - if(grid == "agni") - { - mCrashHost = "https://viewercrashreport.agni.lindenlab.com/cgi-bin/viewercrashreceiver.py"; - - } - else - { - mCrashHost = "https://viewercrashreport.damballah.lindenlab.com/cgi-bin/viewercrashreceiver.py"; - } + //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"; + } // Use login servers as the alternate, since they are already load balanced and have a known name - mAltCrashHost = mCrashHost; + mAltCrashHost = "https://login.agni.lindenlab.com:12043/crash/report"; mCrashInfo["DebugLog"] = mDebugLog; mFileMap["StatsLog"] = gDirUtilp->getExpandedFilename(LL_PATH_DUMP,"stats.log"); From 442c4842ab3cbdea8726ec425c55102caaa2033a Mon Sep 17 00:00:00 2001 From: Glenn Glazer Date: Tue, 8 Mar 2016 08:09:11 -0800 Subject: [PATCH 04/10] maint-5974/maint-5422: viewer changes for new crash reporting, remove no send logic --- indra/llcrashlogger/llcrashlogger.cpp | 91 ++++----------------- indra/llcrashlogger/llcrashlogger.h | 2 +- indra/mac_crash_logger/llcrashloggermac.cpp | 6 -- 3 files changed, 18 insertions(+), 81 deletions(-) diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp index b1cf20cc8e..c72d9cda57 100755 --- a/indra/llcrashlogger/llcrashlogger.cpp +++ b/indra/llcrashlogger/llcrashlogger.cpp @@ -201,11 +201,9 @@ void LLCrashLogger::gatherFiles() LLSD endpoint; std::string grid; std::string fqdn; - bool has_logs = readFromXML( static_sd, "static_debug_info.log" ); has_logs |= readFromXML( dynamic_sd, "dynamic_debug_info.log" ); - bool has_endpoint = readFromXML( endpoint, "endpoint.xml" ); if ( has_logs ) @@ -216,6 +214,7 @@ void LLCrashLogger::gatherFiles() mFileMap["SecondLifeLog"] = mDebugLog["SLLog"].asString(); mFileMap["SettingsXml"] = mDebugLog["SettingsFilename"].asString(); + mFileMap["CrashHostUrl"] = loadCrashURLSetting(); if(mDebugLog.has("CAFilename")) { LLCurl::setCAFile(mDebugLog["CAFilename"].asString()); @@ -245,37 +244,10 @@ void LLCrashLogger::gatherFiles() gatherPlatformSpecificFiles(); - if ( has_endpoint && endpoint.has("ViewerCrashReceiver" ) ) + if ( has_logs && (mFileMap["CrashHostUrl"] != "") ) { - mCrashHost = endpoint["ViewerCrashReceiver"].asString(); + mCrashHost = mFileMap["CrashHostUrl"]; } - else if ( has_logs ) - { - //Use the debug log to reconstruct the URL to send the crash report to - if(mDebugLog.has("CurrentSimHost")) - { - mCrashHost = "http://viewercrashreport"; - fqdn = mDebugLog["CurrentSimHost"].asString(); - boost::regex sim_re( "sim[[:digit:]]+.[[:alpha:]]+.lindenlab.com" ); - boost::match_results results; - if ( regex_match( fqdn, sim_re ) ) - { - boost::regex regex_delimited("\\.[[:alpha:]]+\\."); - boost::match_flag_type flags = boost::match_default; - std::string::const_iterator start = fqdn.begin(); - std::string::const_iterator end = fqdn.end(); - boost::regex_search(start, end, results, regex_delimited, flags); - grid = std::string(results[0].first, results[0].second); - mCrashHost += grid; - mCrashHost += "lindenlab.com/cgi-bin/viewercrashreceiver.py"; - } - else - { - mCrashHost = ""; - } - - } - } //default to agni, per product mAltCrashHost = "http://viewercrashreport.agni.lindenlab.com/cgi-bin/viewercrashreceiver.py"; @@ -363,8 +335,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)) @@ -374,38 +347,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) @@ -451,6 +400,7 @@ bool LLCrashLogger::sendCrashLog(std::string dump_dir) bool sent = false; //*TODO: Translate + updateApplication("DEBUG: crash host in send logs "+mCrashHost); if(mCrashHost != "") { std::string msg = "Using derived crash server... "; @@ -462,8 +412,8 @@ bool LLCrashLogger::sendCrashLog(std::string dump_dir) if(!sent) { - updateApplication("Using alternate (default) server..."); - sent = runCrashLogPost(mAltCrashHost, post_data, std::string("Sending to alternate server"), 3, 5); + updateApplication("Using default server..."); + sent = runCrashLogPost(mAltCrashHost, post_data, std::string("Sending to default server"), 3, 5); } mSentCrashLogs = sent; @@ -535,14 +485,7 @@ bool LLCrashLogger::init() // 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; - } - + gServicePump = new LLPumpIO(gAPRPoolp); gServicePump->prime(gAPRPoolp); LLHTTPClient::setPump(*gServicePump); diff --git a/indra/llcrashlogger/llcrashlogger.h b/indra/llcrashlogger/llcrashlogger.h index b8a007f2be..7defe6b8f9 100755 --- a/indra/llcrashlogger/llcrashlogger.h +++ b/indra/llcrashlogger/llcrashlogger.h @@ -45,7 +45,7 @@ class LLCrashLogger : public LLApp public: LLCrashLogger(); virtual ~LLCrashLogger(); - S32 loadCrashBehaviorSetting(); + std::string loadCrashURLSetting(); bool readFromXML(LLSD& dest, const std::string& filename ); void gatherFiles(); void mergeLogs( LLSD src_sd ); diff --git a/indra/mac_crash_logger/llcrashloggermac.cpp b/indra/mac_crash_logger/llcrashloggermac.cpp index ed64ebdb8c..3149fad6e8 100755 --- a/indra/mac_crash_logger/llcrashloggermac.cpp +++ b/indra/mac_crash_logger/llcrashloggermac.cpp @@ -72,12 +72,6 @@ bool LLCrashLoggerMac::mainLoop() gSendReport = true; } - if(gRememberChoice) - { - if(gSendReport) saveCrashBehaviorSetting(CRASH_BEHAVIOR_ALWAYS_SEND); - else saveCrashBehaviorSetting(CRASH_BEHAVIOR_NEVER_SEND); - } - if(gSendReport) { setUserText(gUserNotes); From 68745390eaaf20cceb788f7538fb4550e806581f Mon Sep 17 00:00:00 2001 From: Glenn Glazer Date: Tue, 8 Mar 2016 09:39:05 -0800 Subject: [PATCH 05/10] maint-5974 / maint-5422: remove extraneous return statement --- indra/llcrashlogger/llcrashlogger.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp index c72d9cda57..d6c10c031a 100755 --- a/indra/llcrashlogger/llcrashlogger.cpp +++ b/indra/llcrashlogger/llcrashlogger.cpp @@ -439,8 +439,6 @@ bool LLCrashLogger::sendCrashLogs() } return sendCrashLog(rec["dumpdir"].asString()); - - return true; } void LLCrashLogger::updateApplication(const std::string& message) From daf8b882a12cf903d180f6303065d7b83f7a1958 Mon Sep 17 00:00:00 2001 From: Glenn Glazer Date: Tue, 8 Mar 2016 11:55:48 -0800 Subject: [PATCH 06/10] maint-5974 / maint-5422: rip crash logger save behavior out of windows logger --- indra/llcrashlogger/llcrashlogger.h | 1 - indra/win_crash_logger/llcrashloggerwindows.cpp | 16 ---------------- 2 files changed, 17 deletions(-) diff --git a/indra/llcrashlogger/llcrashlogger.h b/indra/llcrashlogger/llcrashlogger.h index 7defe6b8f9..c5f1bee5cf 100755 --- a/indra/llcrashlogger/llcrashlogger.h +++ b/indra/llcrashlogger/llcrashlogger.h @@ -51,7 +51,6 @@ public: 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/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; From aca2085e0e136178733d6fee91aab39bd2c58cbe Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Tue, 5 Apr 2016 13:50:16 -0400 Subject: [PATCH 07/10] upgrade llphysicsextenstions to work around a new clang recursion check --- autobuild.xml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/autobuild.xml b/autobuild.xml index 6c29d5cb18..43bad77d25 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -1528,11 +1528,11 @@ archive hash - 468e88a527e610804c3eecf07f4ed70b + 01a7cc9d0e56238a9abedd7a41ccd0a3 hash_algorithm md5 url - http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source_llphysicsextensions-update/rev/298369/arch/Darwin/installer/llphysicsextensions_source-1.0.298369-darwin-298369.tar.bz2 + http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions/rev/313564/arch/Darwin/installer/llphysicsextensions_source-1.0.313564-darwin-313564.tar.bz2 name darwin @@ -1542,9 +1542,9 @@ archive hash - 793964e49c935b414c4bdbb8a0d14ad1 + c94dc7ab6efe59c0d5d04fc447257c57 url - http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source_llphysicsextensions-update/rev/298369/arch/Linux/installer/llphysicsextensions_source-1.0.298369-linux-298369.tar.bz2 + http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions/rev/313564/arch/Linux/installer/llphysicsextensions_source-1.0.313564-linux-313564.tar.bz2 name linux @@ -1554,16 +1554,16 @@ archive hash - 922aad5261aac150e5ce3c094e57f373 + 4a9dbeb437d0e1546b93d16073ff1442 url - http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source_llphysicsextensions-update/rev/298369/arch/CYGWIN/installer/llphysicsextensions_source-1.0.298369-windows-298369.tar.bz2 + http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions/rev/313564/arch/CYGWIN/installer/llphysicsextensions_source-1.0.313564-windows-313564.tar.bz2 name windows version - 1.0.298369 + 1.0.313564 llphysicsextensions_stub @@ -1582,11 +1582,11 @@ archive hash - 1175977a191ffc936fd0ccca433c8278 + c8c6e5867d1ead7ad452a3359b22cf44 hash_algorithm md5 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub_llphysicsextensions-update/rev/298370/arch/Darwin/installer/llphysicsextensions_stub-1.0.298370-darwin-298370.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions/rev/313563/arch/Darwin/installer/llphysicsextensions_stub-1.0.313563-darwin-313563.tar.bz2 name darwin @@ -1596,9 +1596,9 @@ archive hash - d13d7927692eab2d6a63e36166b72a8a + e99afb25a4fd5b08c5cd3060ae9c1d59 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub_llphysicsextensions-update/rev/298370/arch/Linux/installer/llphysicsextensions_stub-1.0.298370-linux-298370.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions/rev/313563/arch/Linux/installer/llphysicsextensions_stub-1.0.313563-linux-313563.tar.bz2 name linux @@ -1608,16 +1608,16 @@ archive hash - 9594f6fd79ee924fe675a4a23e30516e + 6f4307a35c692e44b872125d7932df8e url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub_llphysicsextensions-update/rev/298370/arch/CYGWIN/installer/llphysicsextensions_stub-1.0.298370-windows-298370.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions/rev/313563/arch/CYGWIN/installer/llphysicsextensions_stub-1.0.313563-windows-313563.tar.bz2 name windows version - 1.0.298370 + 1.0.313563 mesa From f0107eb8aae46a928b0b3e6564cc4ed3031e1271 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Tue, 5 Apr 2016 17:01:15 -0400 Subject: [PATCH 08/10] fix merge error that broke reading avatar complexity reports from simulator --- .../newview/llavatarrenderinfoaccountant.cpp | 111 +++++++----------- 1 file changed, 45 insertions(+), 66 deletions(-) diff --git a/indra/newview/llavatarrenderinfoaccountant.cpp b/indra/newview/llavatarrenderinfoaccountant.cpp index 2be3e8546f..5431daca32 100644 --- a/indra/newview/llavatarrenderinfoaccountant.cpp +++ b/indra/newview/llavatarrenderinfoaccountant.cpp @@ -103,89 +103,68 @@ void LLAvatarRenderInfoAccountant::avatarRenderInfoGetCoro(std::string url, U64 if (result.has(KEY_AGENTS)) { - const LLSD & avatar_render_info = result[KEY_AGENTS]; - if (avatar_render_info.isMap()) + const LLSD & agents = result[KEY_AGENTS]; + if (agents.isMap()) { - if ( avatar_render_info.has(KEY_REPORTING_COMPLEXITY_LIMIT) - && avatar_render_info.has(KEY_OVER_COMPLEXITY_LIMIT)) + for (LLSD::map_const_iterator agent_iter = agents.beginMap(); + agent_iter != agents.endMap(); + agent_iter++ + ) { - U32 reporting = avatar_render_info[KEY_REPORTING_COMPLEXITY_LIMIT].asInteger(); - U32 overlimit = avatar_render_info[KEY_OVER_COMPLEXITY_LIMIT].asInteger(); - - LL_DEBUGS("AvatarRenderInfo") << "complexity limit: "<updateNotificationRegion(reporting, overlimit); - } - - if (avatar_render_info.has(KEY_AGENTS)) - { - const LLSD & agents = avatar_render_info[KEY_AGENTS]; - if (agents.isMap()) + LLUUID target_agent_id = LLUUID(agent_iter->first); + LLViewerObject* avatarp = gObjectList.findObject(target_agent_id); + if (avatarp && avatarp->isAvatar()) { - for (LLSD::map_const_iterator agent_iter = agents.beginMap(); - agent_iter != agents.endMap(); - agent_iter++ - ) + const LLSD & agent_info_map = agent_iter->second; + if (agent_info_map.isMap()) { - LLUUID target_agent_id = LLUUID(agent_iter->first); - LLViewerObject* avatarp = gObjectList.findObject(target_agent_id); - if (avatarp && avatarp->isAvatar()) - { - const LLSD & agent_info_map = agent_iter->second; - if (agent_info_map.isMap()) - { - LL_DEBUGS("AvatarRenderInfo") << " Agent " << target_agent_id - << ": " << agent_info_map << LL_ENDL; + LL_DEBUGS("AvatarRenderInfo") << " Agent " << target_agent_id + << ": " << agent_info_map << LL_ENDL; - if (agent_info_map.has(KEY_WEIGHT)) - { - ((LLVOAvatar *) avatarp)->setReportedVisualComplexity(agent_info_map[KEY_WEIGHT].asInteger()); - } - } - else - { - LL_WARNS("AvatarRenderInfo") << "agent entry invalid" - << " agent " << target_agent_id - << " map " << agent_info_map - << LL_ENDL; - } - } - else + if (agent_info_map.has(KEY_WEIGHT)) { - LL_DEBUGS("AvatarRenderInfo") << "Unknown agent " << target_agent_id << LL_ENDL; + ((LLVOAvatar *) avatarp)->setReportedVisualComplexity(agent_info_map[KEY_WEIGHT].asInteger()); } - } // for agent_iter + } + else + { + LL_WARNS("AvatarRenderInfo") << "agent entry invalid" + << " agent " << target_agent_id + << " map " << agent_info_map + << LL_ENDL; + } } else { - LL_WARNS("AvatarRenderInfo") << "malformed get response agents avatar_render_info is not map" << LL_ENDL; + LL_DEBUGS("AvatarRenderInfo") << "Unknown agent " << target_agent_id << LL_ENDL; } - } // has "agents" - else if (avatar_render_info.has(KEY_ERROR)) - { - const LLSD & error = avatar_render_info[KEY_ERROR]; - LL_WARNS("AvatarRenderInfo") << "Avatar render info GET error: " - << error[KEY_IDENTIFIER] - << ": " << error[KEY_MESSAGE] - << LL_ENDL; - } - else - { - LL_WARNS("AvatarRenderInfo") << "no agent key in get response" << LL_ENDL; - } + } // for agent_iter } else { - LL_WARNS("AvatarRenderInfo") << "malformed get response is not map" << LL_ENDL; + LL_WARNS("AvatarRenderInfo") << "malformed get response '" << KEY_AGENTS << "' is not map" << LL_ENDL; } } // has "agents" - else if (result.has(KEY_ERROR)) + else { - const LLSD & error = result[KEY_ERROR]; - LL_WARNS() << "Avatar render info GET error: " - << error[KEY_IDENTIFIER] - << ": " << error[KEY_MESSAGE] - << " from region " << regionp->getName() + LL_INFOS("AvatarRenderInfo") << "no '"<< KEY_AGENTS << "' key in get response" << LL_ENDL; + } + + if ( result.has(KEY_REPORTING_COMPLEXITY_LIMIT) + && result.has(KEY_OVER_COMPLEXITY_LIMIT)) + { + U32 reporting = result[KEY_REPORTING_COMPLEXITY_LIMIT].asInteger(); + U32 overlimit = result[KEY_OVER_COMPLEXITY_LIMIT].asInteger(); + + LL_DEBUGS("AvatarRenderInfo") << "complexity limit: "<updateNotificationRegion(reporting, overlimit); + } + else + { + LL_WARNS("AvatarRenderInfo") + << "response is missing either '" << KEY_REPORTING_COMPLEXITY_LIMIT + << "' or '" << KEY_OVER_COMPLEXITY_LIMIT << "'" << LL_ENDL; } From 77ef10e0493a192a1e7f1cb988bac757bd199f69 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Thu, 7 Apr 2016 10:04:05 +0200 Subject: [PATCH 09/10] OPEN-292: More removal of orphaned legacy script upload methods --- indra/newview/llcompilequeue.h | 4 - indra/newview/llpreviewscript.cpp | 172 ------------------ indra/newview/llpreviewscript.h | 14 +- .../skins/default/xui/da/notifications.xml | 6 - .../skins/default/xui/de/notifications.xml | 12 -- .../skins/default/xui/en/notifications.xml | 32 ---- .../skins/default/xui/es/notifications.xml | 12 -- .../skins/default/xui/fr/notifications.xml | 12 -- .../skins/default/xui/it/notifications.xml | 12 -- .../skins/default/xui/ja/notifications.xml | 16 -- .../skins/default/xui/pl/notifications.xml | 12 -- .../skins/default/xui/pt/notifications.xml | 12 -- .../skins/default/xui/ru/notifications.xml | 12 -- .../skins/default/xui/tr/notifications.xml | 12 -- .../skins/default/xui/zh/notifications.xml | 12 -- 15 files changed, 1 insertion(+), 351 deletions(-) diff --git a/indra/newview/llcompilequeue.h b/indra/newview/llcompilequeue.h index cee8efe9b0..46bcb9746b 100644 --- a/indra/newview/llcompilequeue.h +++ b/indra/newview/llcompilequeue.h @@ -122,10 +122,6 @@ class LLFloaterCompileQueue : public LLFloaterScriptQueue { friend class LLFloaterReg; public: - static void onSaveBytecodeComplete(const LLUUID& asset_id, - void* user_data, - S32 status); - // remove any object in mScriptScripts with the matching uuid. void removeItemByItemID(const LLUUID& item_id); diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 26b5a743d0..fc185667d7 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -1690,94 +1690,6 @@ void LLPreviewLSL::saveIfNeeded(bool sync /*= true*/) } } - -// static -void LLPreviewLSL::onSaveComplete(const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status) // StoreAssetData callback (fixed) -{ - LLScriptSaveInfo* info = reinterpret_cast(user_data); - if(0 == status) - { - if (info) - { - const LLViewerInventoryItem* item; - item = (const LLViewerInventoryItem*)gInventory.getItem(info->mItemUUID); - if(item) - { - LLPointer new_item = new LLViewerInventoryItem(item); - new_item->setAssetUUID(asset_uuid); - new_item->setTransactionID(info->mTransactionID); - new_item->updateServer(FALSE); - gInventory.updateItem(new_item); - gInventory.notifyObservers(); - } - else - { - LL_WARNS() << "Inventory item for script " << info->mItemUUID - << " is no longer in agent inventory." << LL_ENDL; - } - - // Find our window and close it if requested. - LLPreviewLSL* self = LLFloaterReg::findTypedInstance("preview_script", info->mItemUUID); - if (self) - { - getWindow()->decBusyCount(); - self->mPendingUploads--; - if (self->mPendingUploads <= 0 - && self->mCloseAfterSave) - { - self->closeFloater(); - } - } - } - } - else - { - LL_WARNS() << "Problem saving script: " << status << LL_ENDL; - LLSD args; - args["REASON"] = std::string(LLAssetStorage::getErrorString(status)); - LLNotificationsUtil::add("SaveScriptFailReason", args); - } - delete info; -} - -// static -void LLPreviewLSL::onSaveBytecodeComplete(const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status) // StoreAssetData callback (fixed) -{ - LLUUID* instance_uuid = (LLUUID*)user_data; - LLPreviewLSL* self = NULL; - if(instance_uuid) - { - self = LLFloaterReg::findTypedInstance("preview_script", *instance_uuid); - } - if (0 == status) - { - if (self) - { - LLSD row; - row["columns"][0]["value"] = "Compile successful!"; - row["columns"][0]["font"] = "SANSSERIF_SMALL"; - self->mScriptEd->mErrorList->addElement(row); - - // Find our window and close it if requested. - self->getWindow()->decBusyCount(); - self->mPendingUploads--; - if (self->mPendingUploads <= 0 - && self->mCloseAfterSave) - { - self->closeFloater(); - } - } - } - else - { - LL_WARNS() << "Problem saving LSL Bytecode (Preview)" << LL_ENDL; - LLSD args; - args["REASON"] = std::string(LLAssetStorage::getErrorString(status)); - LLNotificationsUtil::add("SaveBytecodeFailReason", args); - } - delete instance_uuid; -} - // static void LLPreviewLSL::onLoadComplete( LLVFS *vfs, const LLUUID& asset_uuid, LLAssetType::EType type, void* user_data, S32 status, LLExtStat ext_status) @@ -2308,90 +2220,6 @@ void LLLiveLSLEditor::saveIfNeeded(bool sync /*= true*/) } } - -void LLLiveLSLEditor::onSaveTextComplete(const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status) // StoreAssetData callback (fixed) -{ - LLLiveLSLSaveData* data = (LLLiveLSLSaveData*)user_data; - - if (status) - { - LL_WARNS() << "Unable to save text for a script." << LL_ENDL; - LLSD args; - args["REASON"] = std::string(LLAssetStorage::getErrorString(status)); - LLNotificationsUtil::add("CompileQueueSaveText", args); - } - else - { - LLSD floater_key; - floater_key["taskid"] = data->mSaveObjectID; - floater_key["itemid"] = data->mItem->getUUID(); - LLLiveLSLEditor* self = LLFloaterReg::findTypedInstance("preview_scriptedit", floater_key); - if (self) - { - self->getWindow()->decBusyCount(); - self->mPendingUploads--; - if (self->mPendingUploads <= 0 - && self->mCloseAfterSave) - { - self->closeFloater(); - } - } - } - delete data; - data = NULL; -} - - -void LLLiveLSLEditor::onSaveBytecodeComplete(const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status) // StoreAssetData callback (fixed) -{ - LLLiveLSLSaveData* data = (LLLiveLSLSaveData*)user_data; - if(!data) - return; - if(0 ==status) - { - LL_INFOS() << "LSL Bytecode saved" << LL_ENDL; - LLSD floater_key; - floater_key["taskid"] = data->mSaveObjectID; - floater_key["itemid"] = data->mItem->getUUID(); - LLLiveLSLEditor* self = LLFloaterReg::findTypedInstance("preview_scriptedit", floater_key); - if (self) - { - // Tell the user that the compile worked. - self->mScriptEd->mErrorList->setCommentText(LLTrans::getString("SaveComplete")); - // close the window if this completes both uploads - self->getWindow()->decBusyCount(); - self->mPendingUploads--; - if (self->mPendingUploads <= 0 - && self->mCloseAfterSave) - { - self->closeFloater(); - } - } - LLViewerObject* object = gObjectList.findObject(data->mSaveObjectID); - if(object) - { - object->saveScript(data->mItem, data->mActive, false); - dialog_refresh_all(); - //LLToolDragAndDrop::dropScript(object, ids->first, - // LLAssetType::AT_LSL_TEXT, FALSE); - } - } - else - { - LL_INFOS() << "Problem saving LSL Bytecode (Live Editor)" << LL_ENDL; - LL_WARNS() << "Unable to save a compiled script." << LL_ENDL; - - LLSD args; - args["REASON"] = std::string(LLAssetStorage::getErrorString(status)); - LLNotificationsUtil::add("CompileQueueSaveBytecode", args); - } - - std::string filepath = gDirUtilp->getExpandedFilename(LL_PATH_CACHE,asset_uuid.asString()); - std::string dst_filename = llformat("%s.lso", filepath.c_str()); - LLFile::remove(dst_filename); - delete data; -} - BOOL LLLiveLSLEditor::canClose() { return (mScriptEd->canClose()); diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h index fc2a56c0a4..a8c6a6eeeb 100644 --- a/indra/newview/llpreviewscript.h +++ b/indra/newview/llpreviewscript.h @@ -204,10 +204,6 @@ protected: virtual void loadAsset(); /*virtual*/ void saveIfNeeded(bool sync = true); - void uploadAssetLegacy(const std::string& filename, - const LLUUID& item_id, - const LLTransactionID& tid); - static void onSearchReplace(void* userdata); static void onLoad(void* userdata); static void onSave(void* userdata, BOOL close_after_save); @@ -215,9 +211,7 @@ protected: static void onLoadComplete(LLVFS *vfs, const LLUUID& uuid, LLAssetType::EType type, void* user_data, S32 status, LLExtStat ext_status); - static void onSaveComplete(const LLUUID& uuid, void* user_data, S32 status, LLExtStat ext_status); - static void onSaveBytecodeComplete(const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status); - + protected: static void* createScriptEdPanel(void* userdata); @@ -268,10 +262,6 @@ private: virtual void loadAsset(); void loadAsset(BOOL is_new); /*virtual*/ void saveIfNeeded(bool sync = true); - void uploadAssetLegacy(const std::string& filename, - LLViewerObject* object, - const LLTransactionID& tid, - BOOL is_running); BOOL monoChecked() const; @@ -282,8 +272,6 @@ private: static void onLoadComplete(LLVFS *vfs, const LLUUID& asset_uuid, LLAssetType::EType type, void* user_data, S32 status, LLExtStat ext_status); - static void onSaveTextComplete(const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status); - static void onSaveBytecodeComplete(const LLUUID& asset_uuid, void* user_data, S32 status, LLExtStat ext_status); static void onRunningCheckboxClicked(LLUICtrl*, void* userdata); static void onReset(void* userdata); diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml index aad3b9d062..5b7f196265 100644 --- a/indra/newview/skins/default/xui/da/notifications.xml +++ b/indra/newview/skins/default/xui/da/notifications.xml @@ -85,12 +85,6 @@ Check at Internet forbindelsen fungerer korrekt. Gem ændringer til nuværende tøj/krops del? - - Der var problemer med upload af teksten til et script af følgende årsager: [REASON]. Prøv igen senere. - - - Der var problemer med at uploade den kompileret script af følgende årsager: [REASON]. Prøv igen senere. - Der var et problem med skrivning af animations data. Prøv igen senere. diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml index 19b488b048..6196883f99 100644 --- a/indra/newview/skins/default/xui/de/notifications.xml +++ b/indra/newview/skins/default/xui/de/notifications.xml @@ -219,12 +219,6 @@ Marktplatzinitialisierung aufgrund eines System- oder Netzwerkfehlers fehlgeschl Wir haben Ihre Auflistung entfernt, da der Versionsordner leer ist. Um diese Auflistung erneut zu listen, müssen Sie Artikel zum Versionsordner hinzufügen. - - Der Text für ein Skript konnte aus folgendem Grund nicht hochgeladen werden: [REASON]. Bitte versuchen Sie es erneut. - - - Eine kompiliertes Skript konnte aus folgendem Grund nicht hochgeladen werden: [REASON]. Bitte versuchen Sie es erneut. - Fehler beim Schreiben von Animationsdaten. Bitte versuchen Sie es erneut. @@ -610,16 +604,10 @@ Möchten Sie die letzte gespeicherte Version vom Server laden? (**Warnung** Dieser Vorgang kann nicht rückgängig gemacht werden.) - - Ein Skript konnte aus folgendem Grund nicht gespeichert werden: [REASON]. Speichern Sie das Skript bitte später. - Skript konnte nicht gespeichert werden, weil das zugehörige Objekt nicht gefunden wurde. Das Objekt ist möglicherweise außer Reichweite oder wurde gelöscht. - - Ein kompiliertes Skript konnte aus folgendem Grund nicht gespeichert werden: [REASON]. Speichern Sie das Skript bitte später. - Ihre Startregion ist nicht definiert. Geben Sie den Namen der Region im Feld „Startposition“ ein oder wählen Sie „Mein letzter Standort“ oder „Mein Zuhause“ als Startposition aus. diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index cf6eac66b7..10cce8432b 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -552,22 +552,6 @@ This listing could not be updated. yestext="OK"/> - -There was a problem uploading the text for a script due to the following reason: [REASON]. Please try again later. - fail - - - -There was a problem uploading the compiled script due to the following reason: [REASON]. Please try again later. - fail - - - -There was a problem saving a script due to the following reason: [REASON]. Please try re-saving the script later. -fail - - fail - -There was a problem saving a compiled script due to the following reason: [REASON]. Please try re-saving the script later. -fail - - - - Hubo un problema al subir el texto de un script por la siguiente razón: [REASON]. Por favor, inténtalo más tarde. - - - Hubo un problema al subir el script compilado por la siguiente razón: [REASON]. Por favor, inténtalo más tarde. - Hubo un problema al escribir los datos de la animación. Por favor, inténtalo más tarde. @@ -598,16 +592,10 @@ El objeto debe de haber sido borrado o estar fuera de rango ('out of range& (**Cuidado** No podrás deshacer esta operación). - - Al guardar un script, hubo un problema por: [REASON]. Por favor, vuelve a intentar guardarlo más tarde. - No se ha podido guardar el script porque no se pudo encontrar el objeto que incluye. El objeto debe de haber sido borrado o estar fuera de rango ('out of range').. - - Al guardar un script compilado, hubo un problema por: [REASON]. Por favor, vuelve a intentar guardarlo más tarde.. - No está definida tu región inicial. Por favor, escribe el nombre de la región en el cuadro de Posición inicial o elige para esa posición Mi Base o Mi última posición. diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml index 4e369bdad1..1c4d5db1cf 100644 --- a/indra/newview/skins/default/xui/fr/notifications.xml +++ b/indra/newview/skins/default/xui/fr/notifications.xml @@ -219,12 +219,6 @@ L'initialisation de la Place du marché a échoué en raison d'une err Nous avons supprimé votre annonce car le dossier de version est vide. Vous devez ajouter des articles au dossier de version si vous voulez republier votre annonce. - - Une erreur est survenue lors du chargement du texte pour un script, suite au problème suivant : [REASON]. Veuillez réessayer ultérieurement. - - - Une erreur est survenue lors du chargement du script compilé, suite au problème suivant : [REASON]. Veuillez réessayer ultérieurement. - Une erreur est survenue lors de l'écriture des données d'animation. Veuillez réessayer ultérieurement. @@ -602,16 +596,10 @@ Souhaitez-vous charger la dernière version enregistrée sur le serveur ? (**Attention** Cette opération est irréversible.) - - Une erreur est survenue lors de l'enregistrement du script, suite au problème suivant : [REASON]. Essayez d'enregistrer votre script ultérieurement. - Impossible d'enregistrer le script car l'objet qui le contient est introuvable. L'objet est peut-être inaccessible ou a peut-être été supprimé. - - Une erreur est survenue lors de l'enregistrement du script compilé, suite au problème suivant : [REASON]. Essayez d'enregistrer votre script ultérieurement. - Vous n'avez pas défini de région de départ. Saisissez le nom de la région voulue dans la case Lieu de départ ou choisissez Dernier emplacement ou Domicile comme lieu de départ. diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml index 00435e6d9d..3bdf93bcc9 100644 --- a/indra/newview/skins/default/xui/it/notifications.xml +++ b/indra/newview/skins/default/xui/it/notifications.xml @@ -219,12 +219,6 @@ L'inizializzazione con il Marketplace non ha avuto successo a causa di un e L'annuncio è stato rimosso perché la cartella della versione è vuota. Aggiungi elementi alla cartella della versione prima di pubblicare nuovamente l'annuncio. - - C'è stato un problema importando il testo di uno script per la seguente ragione: [REASON]. Riprova più tardi. - - - C'è stato un problema importando lo script compilato per la seguente ragione: [REASON]. Riprova più tardi. - C'è stato un problema di scrittura dati dell'animazione. Riprova più tardi. @@ -600,16 +594,10 @@ Vuoi ripristinare l'ultima versione salvata sul server? (**Attenzione** Questa operazione non è reversibile) - - C'è stato un problema salvando lo script a causa del seguente motivo : [REASON]. Riprova a salvare lo script più tardi. - Non è stato possibile salvare lo script perchè l'oggetto che lo contiene non è stato trovato. L'oggetto potrebbe essere troppo lontano oppure essere stato cancellato. - - C'è stato un problema salvando lo script compilato a causa del seguente motivo: [REASON]. Riprova a salvare lo script più tardi. - La tua Regione di inizio non è stata definita. Per scegliere il luogo dove vuoi trovarti all'accesso, digita il nome della regione nel campo del luogo di partenza oppure scegli La mia ultima Ubicazione o Casa mia. diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index b97899bb9b..822aafe88f 100644 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -218,16 +218,6 @@ バージョンフォルダが空のため、リストを削除しました。もう一度リストを表示するには、バージョンフォルダにアイテムを追加する必要があります。 - - 次の理由で、スクリプト用テキストのアップロード時に問題が起こりました。 -[REASON] -後でもう一度お試しください。 - - - 次の理由で、コンパイルしたスクリプトのアップロード時に問題が起こりました。 -[REASON] -後でもう一度お試しください。 - アニメーションデータの書き込みに問題があります。後でもう一度お試しください。 @@ -625,16 +615,10 @@ L$ が不足しているのでこのグループに参加することができ (**警告**:この操作後元に戻すことはできません) - - 次の理由で、スクリプトの保存に問題が起こりました。 [REASON]。 後でもう一度試してください。 - スクリプトの保存に失敗しました。スクリプトが入ったオブジェクトが見つかりません。 オブジェクトは範囲外か、または削除されているかもしれません。 - - 次の理由で、コンパイルしたスクリプトの保存時に問題が起こりました。 [REASON]。 後でもう一度試してください。 - ログイン位置が指定されていません。 ログイン位置の欄にリージョン名を入力するか、「最後にログアウトした場所」か「自宅(ホーム)」を選択してください。 diff --git a/indra/newview/skins/default/xui/pl/notifications.xml b/indra/newview/skins/default/xui/pl/notifications.xml index 0092fe09d2..8f973dbe52 100644 --- a/indra/newview/skins/default/xui/pl/notifications.xml +++ b/indra/newview/skins/default/xui/pl/notifications.xml @@ -72,12 +72,6 @@ Foldery nie zostały wysłane na Marketplace z powodu błędu sieci lub systemu. Inicjalizacja Marketplace nieudana z powodu błędu sieci lub systemu. Spróbuj później. - - W trakcie ładowania tekstu dla skryptu pojawił się problem z następującego powodu: [REASON]. Spróbuj ponownie za kilka minut. - - - W trakcie ładowania skompilowanego skryptu pojawił się problem z następującego powodu: [REASON]. Spróbuj ponownie za kilka minut. - Problem w zapisywaniu danych animacji. Spróbuj ponownie za kilka minut. @@ -442,16 +436,10 @@ Czy chcesz załadować ostatnią wersję zapisaną na serwerze? (*UWAGA* Ta operacja jest nieodwracalna.) - - Nie można zapisać skryptu z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz później. - Nie można zapisać skryptu ponieważ obiekt w którym się zawiera nie został znaleziony. Obiekt może znajdować się zbyt daleko albo został usunięty. - - Nie można zapisać skompilowanego skryptu z następującego powodu: [REASON]. Spróbuj zapisać jeszcze raz później. - Twoje miejsce startu nie zostało określone. Wpisz proszę nazwę regionu w lokalizację startu w polu Lokalizacja Startu lub wybierz 'Moja ostatnia lokalizacja' albo 'Miejsce Startu'. diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml index db9f7fc766..fc5a9fabf9 100644 --- a/indra/newview/skins/default/xui/pt/notifications.xml +++ b/indra/newview/skins/default/xui/pt/notifications.xml @@ -218,12 +218,6 @@ Ocorreu uma falha na inicialização do Marketplace devido a um erro do sistema Removemos sua listagem porque a pasta de versões está vazia. Você precisa adicionar itens à pasta de versões para que a listagem seja exibida novamente. - - Houve um problema com o carregamento do texto para um script devido à seguinte razão: [REASON]. Por favor, tente novamente mais tarde. - - - Houve um problema durante o carregamento do script compilado devido à seguinte razão: [REASON]. Por favor, tente novamente mais tarde. - Falha nos dados de inscrição de animação. Por favor, tente mais tarde. @@ -597,16 +591,10 @@ Gostaria de carregar a última versão salva? (**Aviso** Esta operação não pode ser desfeita). - - Houve um problema em salvar um script devido à seguinte razão: [REASON]. Tente salvar novamente o script mais tarde. - Não foi possível salvar o script pois o objeto em que ele está não pôde ser encontrado. O objeto pode estar fora de alcance ou ter sido deletado. - - Houve um problema em salvar uma compilação de script devido a seguinte razão: [REASON]. Por favor, tente salvar novamente o script mais tarde. - Sua região de partida não está definida. Digite o nome da região na caixa 'Ponto de partida' ou selecione 'Meu último local' ou 'Minha casa' como ponto de partida. diff --git a/indra/newview/skins/default/xui/ru/notifications.xml b/indra/newview/skins/default/xui/ru/notifications.xml index 3df0e607bd..b2bb8c59aa 100644 --- a/indra/newview/skins/default/xui/ru/notifications.xml +++ b/indra/newview/skins/default/xui/ru/notifications.xml @@ -219,12 +219,6 @@ Публикация вашего списка прекращена, так как папка версии пуста. Добавьте предметы в папку версии, чтобы опубликовать список снова. - - Ошибка при передаче текста скрипта по следующей причине: [REASON]. Повторите попытку позже. - - - Ошибка при передаче скомпилированного скрипта по следующей причине: [REASON]. Повторите попытку позже. - Ошибка при записи данных анимации. Повторите попытку позже. @@ -603,16 +597,10 @@ (**Предупреждение** Эту операцию нельзя отменить.) - - Ошибка при сохранении скрипта по следующей причине: [REASON]. Попробуйте сохранить скрипт через некоторое время. - Не удалось сохранить скрипт: не найден объект, в котором он находится. Возможно, объект находится вне допустимого диапазона или удален. - - Ошибка при сохранении скомпилированного скрипта по следующей причине: [REASON]. Попробуйте сохранить скрипт через некоторое время. - Ваш стартовый регион не определен. Введите название региона в поле «Место старта» или выберите в качестве места старта «Мое последнее место» или «Мой дом». diff --git a/indra/newview/skins/default/xui/tr/notifications.xml b/indra/newview/skins/default/xui/tr/notifications.xml index 8c8aacf36e..4a116254c8 100644 --- a/indra/newview/skins/default/xui/tr/notifications.xml +++ b/indra/newview/skins/default/xui/tr/notifications.xml @@ -219,12 +219,6 @@ Bu öğeyi Pazaryeri üzerinde düzenlemek için [[URL] buraya tıklayın]. Sürüm klasörü boş olduğu için ilanınızı yayından kaldırdık. İlanı yeniden yayınlamak için sürüm klasörüne daha fazla birim eklemeniz gerekir. - - Aşağıdaki nedenden dolayı, bir komut dosyası için metin karşıya yüklenirken bir sorun oluştu: [REASON]. Lütfen daha sonra tekrar deneyin. - - - Aşağıdaki nedenden dolayı, derlenen komut dosyası karşıya yüklenirken bir sorun oluştu: [REASON]. Lütfen daha sonra tekrar deneyin. - Animasyon verileri yazılırken bir sorun oluştu. Lütfen daha sonra tekrar deneyin. @@ -603,16 +597,10 @@ Sunucunun son kaydedilmiş sürümünü yüklemek ister misiniz? (**Uyarı** Bu işlem geri alınamaz.) - - Aşağıdaki nedenden dolayı, komut dosyası kaydedilirken bir sorun oluştu: [REASON]. Lütfen komut dosyasını kaydetmeyi daha sonra tekrar deneyin. - İçinde olduğu nesne bulunamadığından komut dosyası kaydedilemiyor. Nesne aralık dışında ya da silinmiş olabilir. - - Aşağıdaki nedenden dolayı, derlenen komut dosyası kaydedilirken bir sorun oluştu: [REASON]. Lütfen komut dosyasını kaydetmeyi daha sonra tekrar deneyin. - Başlangıç Bölgeniz tanımlanmamış. Lütfen Başlangıç Konumu kutusuna Bölge adını yazın ya da Son Bulunduğum Konum veya Ana Konumumu Başlangıç Konumu olarak seçin. diff --git a/indra/newview/skins/default/xui/zh/notifications.xml b/indra/newview/skins/default/xui/zh/notifications.xml index 0865c6dbc1..3b9c5a5041 100644 --- a/indra/newview/skins/default/xui/zh/notifications.xml +++ b/indra/newview/skins/default/xui/zh/notifications.xml @@ -219,12 +219,6 @@ 因為版本資料夾是空的,我們已經把你的刊登物下架。 你若希望重新刊登,必須先新增物項到該版本資料夾。 - - 上傳腳本文字時出問題,原因:[REASON]。 請稍候再試一次。 - - - 上傳已編譯腳本時出問題,原因:[REASON]。 請稍候再試一次。 - 寫入動作資料時出錯。 請稍候再試一次。 @@ -603,16 +597,10 @@ (*警告* 這動作無法還原。) - - 儲存腳本時出問題,原因:[REASON]。 請稍後再嘗試儲存腳本。 - 無法儲存腳本,找不到它所屬的物件。 該物件可能超出範圍或已被刪除。 - - 儲存編譯腳本時出問題,原因:[REASON]。 請稍後再嘗試儲存腳本。 - 你的起始地區尚未定義。 請在「開始位置」框裡輸入區域名,或選擇「我上一次位置」或「我的家」作為開始位置。 From 57488bc3812d9d308cc9e869c2088ba8212bc851 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Wed, 13 Apr 2016 14:41:38 -0400 Subject: [PATCH 10/10] add logging around crash reporting, with minor code cleanups --- indra/llcrashlogger/llcrashlogger.cpp | 65 ++++++++++++--------- indra/mac_crash_logger/mac_crash_logger.cpp | 5 -- 2 files changed, 36 insertions(+), 34 deletions(-) diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp index 91f6e469d1..8e0a725954 100644 --- a/indra/llcrashlogger/llcrashlogger.cpp +++ b/indra/llcrashlogger/llcrashlogger.cpp @@ -70,12 +70,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; } @@ -231,8 +234,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 { @@ -268,25 +271,27 @@ void LLCrashLogger::gatherFiles() for(std::map::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(); + 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") << "Can't find file " << (*itr).second << LL_ENDL; + } } std::string minidump_path; @@ -376,6 +381,7 @@ bool LLCrashLogger::runCrashLogPost(std::string host, LLSD data, std::string msg { 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)); @@ -412,6 +418,8 @@ bool LLCrashLogger::sendCrashLog(std::string dump_dir) "SecondLifeCrashReport"); std::string report_file = dump_path + ".log"; + LL_DEBUGS("CRASHREPORT") << "sending " << report_file << LL_ENDL; + gatherFiles(); LLSD post_data; @@ -426,11 +434,11 @@ bool LLCrashLogger::sendCrashLog(std::string dump_dir) bool sent = false; - //*TODO: Translate - updateApplication("DEBUG: crash host in send logs "+mCrashHost); - if(mCrashHost != "") - { - std::string msg = "Using derived crash server... "; + 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()); @@ -470,11 +478,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 @@ -498,7 +508,7 @@ 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() << "Crash reporter file rotation complete." << LL_ENDL; + LL_INFOS("CRASHREPORT") << "Crash reporter file rotation complete." << LL_ENDL; mCrashSettings.declareS32("CrashSubmitBehavior", CRASH_BEHAVIOR_ALWAYS_SEND, "Controls behavior when viewer crashes " @@ -506,9 +516,6 @@ bool LLCrashLogger::init() "1 = always send crash report, " "2 = never send crash report)"); - // LL_INFOS() << "Loading crash behavior setting" << LL_ENDL; - // mCrashBehavior = loadCrashBehaviorSetting(); - init_curl(); LLCore::HttpRequest::createService(); LLCore::HttpRequest::startThread(); diff --git a/indra/mac_crash_logger/mac_crash_logger.cpp b/indra/mac_crash_logger/mac_crash_logger.cpp index 72f4ede999..95d4e65207 100644 --- a/indra/mac_crash_logger/mac_crash_logger.cpp +++ b/indra/mac_crash_logger/mac_crash_logger.cpp @@ -45,11 +45,6 @@ int main(int argc, char **argv) return 1; } - if (!(options.has("pid") && options.has("dumpdir"))) - { - LL_WARNS() << "Insufficient parameters to crash report." << llendl; - } - if (app.getCrashBehavior() != CRASH_BEHAVIOR_ALWAYS_SEND) { // return NSApplicationMain(argc, (const char **)argv);