diff options
-rwxr-xr-x | indra/llcommon/llapp.cpp | 70 | ||||
-rwxr-xr-x | indra/llcommon/llapp.h | 2 | ||||
-rwxr-xr-x | indra/newview/llappviewer.cpp | 2 | ||||
-rwxr-xr-x | indra/newview/llappviewer.h | 1 | ||||
-rw-r--r-- | indra/newview/llappviewerwin32.cpp | 2 |
5 files changed, 46 insertions, 31 deletions
diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp index 5c8fff051f..63a38f2884 100755 --- a/indra/llcommon/llapp.cpp +++ b/indra/llcommon/llapp.cpp @@ -320,7 +320,7 @@ void EnableCrashingOnCrashes() } #endif -void LLApp::setupErrorHandling() +void LLApp::setupErrorHandling(bool second_instance) { // Error handling is done by starting up an error handling thread, which just sleeps and // occasionally checks to see if the app is in an error state, and sees if it needs to be run. @@ -337,40 +337,52 @@ void LLApp::setupErrorHandling() // Install the Google Breakpad crash handler for Windows if(mExceptionHandler == 0) { - llwarns << "adding breakpad exception handler" << llendl; + if ( second_instance ) //BUG-5707 Firing teleport from a web browser causes second + { + mExceptionHandler = new google_breakpad::ExceptionHandler( + L"C:\\Temp\\", + 0, //No filter + windows_post_minidump_callback, + 0, + google_breakpad::ExceptionHandler::HANDLER_ALL); //No custom client info. + } + else + { + llwarns << "adding breakpad exception handler" << llendl; - std::wstring wpipe_name; - wpipe_name = mCrashReportPipeStr + wstringize(getPid()); + std::wstring wpipe_name; + wpipe_name = mCrashReportPipeStr + wstringize(getPid()); - const std::wstring wdump_path(wstringize(mDumpPath)); + const std::wstring wdump_path(wstringize(mDumpPath)); - int retries = 30; - for (; retries > 0; --retries) - { - if (mExceptionHandler != 0) delete mExceptionHandler; - - mExceptionHandler = new google_breakpad::ExceptionHandler( - wdump_path, - NULL, //No filter - windows_post_minidump_callback, - 0, - google_breakpad::ExceptionHandler::HANDLER_ALL, - MiniDumpNormal, //Generate a 'normal' minidump. - wpipe_name.c_str(), - NULL); //No custom client info. - if (mExceptionHandler->IsOutOfProcess()) + int retries = 30; + for (; retries > 0; --retries) { - LL_INFOS("CRASHREPORT") << "Successfully attached to Out of Process exception handler." << LL_ENDL; - break; - } - else - { - LL_WARNS("CRASHREPORT") << "Unable to attach to Out of Process exception handler. " << retries << " retries remaining." << LL_ENDL; - ::Sleep(100); //Wait a tick and try again. + if (mExceptionHandler != 0) delete mExceptionHandler; + + mExceptionHandler = new google_breakpad::ExceptionHandler( + wdump_path, + NULL, //No filter + windows_post_minidump_callback, + 0, + google_breakpad::ExceptionHandler::HANDLER_ALL, + MiniDumpNormal, //Generate a 'normal' minidump. + wpipe_name.c_str(), + NULL); //No custom client info. + if (mExceptionHandler->IsOutOfProcess()) + { + LL_INFOS("CRASHREPORT") << "Successfully attached to Out of Process exception handler." << LL_ENDL; + break; + } + else + { + LL_WARNS("CRASHREPORT") << "Unable to attach to Out of Process exception handler. " << retries << " retries remaining." << LL_ENDL; + ::Sleep(100); //Wait a tick and try again. + } } - } - if (retries == 0) LL_WARNS("CRASHREPORT") << "Unable to attach to Out of Process exception handler." << LL_ENDL; + if (retries == 0) LL_WARNS("CRASHREPORT") << "Unable to attach to Out of Process exception handler." << LL_ENDL; + } if (mExceptionHandler) { diff --git a/indra/llcommon/llapp.h b/indra/llcommon/llapp.h index 828965b1fa..3f7bf2ca47 100755 --- a/indra/llcommon/llapp.h +++ b/indra/llcommon/llapp.h @@ -214,7 +214,7 @@ public: * DO NOT call this method if your application has specialized * error handling code. */ - void setupErrorHandling(); + void setupErrorHandling(bool mSecondInstance=false); void setErrorHandler(LLAppErrorHandler handler); static void runErrorHandler(); // run shortly after we detect an error, ran in the relatively robust context of the LLErrorThread - preferred. diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 63d31824e4..413a0abf47 100755 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -740,7 +740,7 @@ public: bool LLAppViewer::init() { - setupErrorHandling(); + setupErrorHandling(mSecondInstance); // // Start of the application diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index cbaa7bc4c2..25b5c90bb0 100755 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -80,6 +80,7 @@ public: bool quitRequested() { return mQuitRequested; } bool logoutRequestSent() { return mLogoutRequestSent; } + bool isSecondInstance() { return mSecondInstance; } void writeDebugInfo(bool isStatic=true); diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp index d9a0eb25e4..5585bd914c 100644 --- a/indra/newview/llappviewerwin32.cpp +++ b/indra/newview/llappviewerwin32.cpp @@ -674,6 +674,8 @@ bool LLAppViewerWin32::restoreErrorTrap() void LLAppViewerWin32::initCrashReporting(bool reportFreeze) { + if (isSecondInstance()) return; //BUG-5707 do not start another crash reporter for second instance. + const char* logger_name = "win_crash_logger.exe"; std::string exe_path = gDirUtilp->getExecutableDir(); exe_path += gDirUtilp->getDirDelimiter(); |