summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rwxr-xr-xindra/newview/llappviewer.cpp20
-rw-r--r--indra/newview/llappviewerwin32.cpp33
-rwxr-xr-xindra/newview/llfloaterspellchecksettings.cpp35
-rwxr-xr-xindra/newview/llfloaterspellchecksettings.h1
4 files changed, 45 insertions, 44 deletions
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 537142ebde..c31c0990c7 100755
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1940,7 +1940,6 @@ bool LLAppViewer::cleanup()
gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE,""), "*.*");
}
- removeDumpDir();
writeDebugInfo();
LLLocationHistory::getInstance()->save();
@@ -2102,6 +2101,14 @@ bool LLAppViewer::cleanup()
llinfos << "Goodbye!" << llendflush;
+ //To preserve logfile on clean shutdown move to regular log dir.
+ std::string curr_log = gDirUtilp->getExpandedFilename(LL_PATH_DUMP,"SecondLife.log");
+ std::string last_log = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"SecondLife.log");
+ LLError::logToFile(""); //Close Secondlife.log
+ LLFile::remove(last_log);
+ LLFile::copy(curr_log, last_log);
+ removeDumpDir();
+
// return 0;
return true;
}
@@ -2191,7 +2198,7 @@ void LLAppViewer::initLoggingAndGetLastDuration()
// Get name of the log file
std::string log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
"SecondLife.log");
- /*
+ /*
* Before touching any log files, compute the duration of the last run
* by comparing the ctime of the previous start marker file with the ctime
* of the last log file.
@@ -2237,6 +2244,8 @@ void LLAppViewer::initLoggingAndGetLastDuration()
// Rename current log file to ".old"
LLFile::rename(log_file, old_log_file);
+ log_file = gDirUtilp->getExpandedFilename(LL_PATH_DUMP,
+ "SecondLife.log");
// Set the log file to SecondLife.log
LLError::logToFile(log_file);
if (!duration_log_msg.empty())
@@ -3505,7 +3514,7 @@ void LLAppViewer::handleViewerCrash()
LL_WARNS("MarkerFile") << "No gDirUtilp with which to create error marker file name" << LL_ENDL;
}
-#ifdef LL_WINDOWS //SPATTERS Wild guess that filename for Breakpad is not being returned due to sleep cycle in Crash Reporter.
+#ifdef LL_WINDOWS
Sleep(2000);
#endif
@@ -3514,12 +3523,9 @@ void LLAppViewer::handleViewerCrash()
if(minidump_file && minidump_file[0] != 0)
{
gDebugInfo["Dynamic"]["MinidumpPath"] = minidump_file;
- //SPATTERS another possibility is that when using OOP it must be initiated by a wrapping program so that when the
- //viewer crashes, we are from a sibling thread than as a child. Might be able to request minidump at this point
- //as a work-around.
}
#ifdef LL_WINDOWS
- else //SPATTERS there is no else here in the older code
+ else
{
getFileList();
}
diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp
index c861d0a99f..0e4efa34c7 100644
--- a/indra/newview/llappviewerwin32.cpp
+++ b/indra/newview/llappviewerwin32.cpp
@@ -276,7 +276,7 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,
viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash);
#if LL_SEND_CRASH_REPORTS
- ::SetUnhandledExceptionFilter(catchallCrashHandler);
+ // ::SetUnhandledExceptionFilter(catchallCrashHandler);
#endif
// Set a debug info flag to indicate if multiple instances are running.
@@ -698,8 +698,35 @@ void LLAppViewerWin32::initCrashReporting(bool reportFreeze)
{
logdir = logdir.substr(0,end+1);
}
- std::string arg_str = "\"" + exe_path + "\" -dumpdir \"" + logdir + "\" -procname \"" + appname + "\" -pid " + stringize(LLApp::getPid());
- _spawnl(_P_NOWAIT, exe_path.c_str(), arg_str.c_str(), NULL);
+ //std::string arg_str = "\"" + exe_path + "\" -dumpdir \"" + logdir + "\" -procname \"" + appname + "\" -pid " + stringize(LLApp::getPid());
+ //_spawnl(_P_NOWAIT, exe_path.c_str(), arg_str.c_str(), NULL);
+ std::string arg_str = "\"" + exe_path + "\" -dumpdir \"" + logdir + "\" -procname \"" + appname + "\" -pid " + stringize(LLApp::getPid());
+
+ STARTUPINFO startInfo={sizeof(startInfo)};
+ PROCESS_INFORMATION processInfo;
+
+ std::wstring exe_wstr;
+ exe_wstr=wstringize(exe_path);
+
+ std::wstring arg_wstr;
+ arg_wstr=wstringize(arg_str);
+
+ LL_INFOS("CrashReport") << "Creating crash reporter process " << exe_path << " with params: " << arg_str << LL_ENDL;
+ if(CreateProcess(exe_wstr.c_str(),
+ &arg_wstr[0], // Application arguments
+ 0,
+ 0,
+ FALSE,
+ CREATE_DEFAULT_ERROR_MODE,
+ 0,
+ 0, // Working directory
+ &startInfo,
+ &processInfo) == FALSE)
+ // Could not start application -> call 'GetLastError()'
+ {
+ LL_WARNS("CrashReport Launch") << "CreateProcess failed " << GetLastError() << LL_ENDL;
+ return;
+ }
}
//virtual
diff --git a/indra/newview/llfloaterspellchecksettings.cpp b/indra/newview/llfloaterspellchecksettings.cpp
index 5ecdd11918..54c7b4c37d 100755
--- a/indra/newview/llfloaterspellchecksettings.cpp
+++ b/indra/newview/llfloaterspellchecksettings.cpp
@@ -307,12 +307,12 @@ void LLFloaterSpellCheckerImport::onBtnOK()
else
{
std::string settings_dic = LLSpellChecker::getDictionaryUserPath() + mDictionaryBasename + ".dic";
- if ( copyFile( dict_dic, settings_dic ) )
+ if ( LLFile::copy( dict_dic, settings_dic ) )
{
if (gDirUtilp->fileExists(dict_aff))
{
std::string settings_aff = LLSpellChecker::getDictionaryUserPath() + mDictionaryBasename + ".aff";
- if (copyFile( dict_aff, settings_aff ))
+ if ( LLFile::copy( dict_aff, settings_aff ))
{
imported = true;
}
@@ -385,37 +385,6 @@ void LLFloaterSpellCheckerImport::onBtnOK()
closeFloater(false);
}
-bool LLFloaterSpellCheckerImport::copyFile(const std::string from, const std::string to)
-{
- bool copied = false;
- LLFILE* in = LLFile::fopen(from, "rb"); /* Flawfinder: ignore */
- if (in)
- {
- LLFILE* out = LLFile::fopen(to, "wb"); /* Flawfinder: ignore */
- if (out)
- {
- char buf[16384]; /* Flawfinder: ignore */
- size_t readbytes;
- bool write_ok = true;
- while(write_ok && (readbytes = fread(buf, 1, 16384, in))) /* Flawfinder: ignore */
- {
- if (fwrite(buf, 1, readbytes, out) != readbytes)
- {
- LL_WARNS("SpellCheck") << "Short write" << LL_ENDL;
- write_ok = false;
- }
- }
- if ( write_ok )
- {
- copied = true;
- }
- fclose(out);
- }
- }
- fclose(in);
- return copied;
-}
-
std::string LLFloaterSpellCheckerImport::parseXcuFile(const std::string& file_path) const
{
LLXMLNodePtr xml_root;
diff --git a/indra/newview/llfloaterspellchecksettings.h b/indra/newview/llfloaterspellchecksettings.h
index eded3a9133..de59d83f24 100755
--- a/indra/newview/llfloaterspellchecksettings.h
+++ b/indra/newview/llfloaterspellchecksettings.h
@@ -58,7 +58,6 @@ protected:
void onBtnBrowse();
void onBtnCancel();
void onBtnOK();
- bool copyFile(const std::string from, const std::string to);
std::string parseXcuFile(const std::string& file_path) const;
std::string mDictionaryDir;