From 04add8806e49f0e5355666b9b8186d6e0bf78781 Mon Sep 17 00:00:00 2001
From: Nat Goodspeed <nat@lindenlab.com>
Date: Thu, 5 Nov 2009 16:53:35 -0500
Subject: Support QAModeTermCode var for unattended shutdown on LL_ERRS.
 Normally LL_ERRS in a developer build of the viewer pops up an OS message box
 with the text of the LL_ERRS log message, requiring user intervention to
 proceed. This isn't good for unattended testing, especially on Parabuild
 machines. Running the viewer with '--set QAModeTermCode n' for some 0 < n <
 256 will, on LL_ERRS, cause the viewer to terminate immediately with
 _exit(n).

---
 indra/newview/app_settings/settings.xml | 13 ++++++++++++-
 indra/newview/llappviewer.cpp           | 16 ++++++++++++++--
 2 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 7254fff664..da7caad21e 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -5473,7 +5473,18 @@
     <key>QAModeEventHostPort</key>
     <map>
       <key>Comment</key>
-      <string>Enable Testing Features.</string>
+      <string>Port on which lleventhost should listen</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>-1</integer>
+    </map>
+    <key>QAModeTermCode</key>
+    <map>
+      <key>Comment</key>
+      <string>On LL_ERRS, terminate with this code instead of OS message box</string>
       <key>Persist</key>
       <integer>0</integer>
       <key>Type</key>
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 873215169e..e95eec4741 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -620,7 +620,19 @@ bool LLAppViewer::init()
 	
 	if (!initConfiguration())
 		return false;
-	
+
+	// Although initLogging() is the right place to mess with
+	// setFatalFunction(), we can't query gSavedSettings until after
+	// initConfiguration().
+	S32 rc(gSavedSettings.getS32("QAModeTermCode"));
+	if (rc >= 0)
+	{
+		// QAModeTermCode set, terminate with that rc on LL_ERRS. Use _exit()
+		// rather than exit() because normal cleanup depends too much on
+		// successful startup!
+		LLError::setFatalFunction(boost::bind(_exit, rc));
+	}
+
     mAlloc.setProfilingEnabled(gSavedSettings.getBOOL("MemProfiling"));
 
     // *NOTE:Mani - LLCurl::initClass is not thread safe. 
@@ -1665,7 +1677,7 @@ bool LLAppViewer::initLogging()
 	LLError::initForApplication(
 				gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, ""));
 	LLError::setFatalFunction(errorCallback);
-	
+
 	// Remove the last ".old" log file.
 	std::string old_log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
 							     "SecondLife.old");
-- 
cgit v1.2.3


From 7b33c9b862d478dc488d86593116ef35030321f2 Mon Sep 17 00:00:00 2001
From: Nat Goodspeed <nat@lindenlab.com>
Date: Thu, 5 Nov 2009 16:55:31 -0500
Subject: Produce slightly more info for bad LLDir::setLindenUserDir() call

---
 indra/llvfs/lldir.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/indra/llvfs/lldir.cpp b/indra/llvfs/lldir.cpp
index 781321e5e4..c0c6e592d5 100644
--- a/indra/llvfs/lldir.cpp
+++ b/indra/llvfs/lldir.cpp
@@ -580,7 +580,7 @@ void LLDir::setLindenUserDir(const std::string &first, const std::string &last)
 	}
 	else
 	{
-		llerrs << "Invalid name for LLDir::setLindenUserDir" << llendl;
+		llerrs << "Invalid name for LLDir::setLindenUserDir(first='" << first << "', last='" << last << "')" << llendl;
 	}
 
 	dumpCurrentDirectories();	
-- 
cgit v1.2.3