diff options
| author | Graham Madarasz <graham@lindenlab.com> | 2013-06-07 12:50:02 -0700 | 
|---|---|---|
| committer | Graham Madarasz <graham@lindenlab.com> | 2013-06-07 12:50:02 -0700 | 
| commit | c60eac25e5f1655e2c1d2c7ed2680da39db07f51 (patch) | |
| tree | 2d36cdf48bd0e01e0cc01503ceca02c8016c8b7f /indra | |
| parent | 3a4d72f8d993656a566847f1bb3cc9ad8ab9b398 (diff) | |
| parent | bc6070bd197159dd81750d1e2e8af493864be818 (diff) | |
Merge MAINT-2740 crash fix
Diffstat (limited to 'indra')
| -rwxr-xr-x | indra/llcommon/llerror.cpp | 27 | ||||
| -rwxr-xr-x | indra/llcommon/llerror.h | 13 | ||||
| -rwxr-xr-x | indra/llui/llxuiparser.cpp | 22 | ||||
| -rwxr-xr-x | indra/newview/llpanelface.cpp | 4 | 
4 files changed, 47 insertions, 19 deletions
| diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp index 9b0141eb76..d2af004cde 100755 --- a/indra/llcommon/llerror.cpp +++ b/indra/llcommon/llerror.cpp @@ -201,10 +201,7 @@ namespace {  		virtual void recordMessage(LLError::ELevel level,  								   const std::string& message)  		{ -			llutf16string utf16str = -				wstring_to_utf16str(utf8str_to_wstring(message)); -			utf16str += '\n'; -			OutputDebugString(utf16str.c_str()); +			LL_WINDOWS_OUTPUT_DEBUG(message);  		}  	};  #endif @@ -1401,5 +1398,27 @@ namespace LLError     {         sIndex = 0 ;     } + +#if LL_WINDOWS +	void LLOutputDebugUTF8(const std::string& s) +	{ +		// Be careful when calling OutputDebugString as it throws DBG_PRINTEXCEPTION_C  +		// which works just fine under the windows debugger, but can cause users who +		// have enabled SEHOP exception chain validation to crash due to interactions +		// between the Win 32-bit exception handling and boost coroutine fiber stacks. BUG-2707 +		// +		if (IsDebuggerPresent()) +		{ +			// Need UTF16 for Unicode OutputDebugString +			// +			if (s.size()) +			{ +				OutputDebugString(utf8str_to_utf16str(s).c_str()); +				OutputDebugString(TEXT("\n")); +			} +		} +	} +#endif +  } diff --git a/indra/llcommon/llerror.h b/indra/llcommon/llerror.h index b65b410153..0b723aeb5d 100755 --- a/indra/llcommon/llerror.h +++ b/indra/llcommon/llerror.h @@ -34,7 +34,6 @@  #include "llerrorlegacy.h"  #include "stdtypes.h" -  /** Error Logging Facility  	Information for most users: @@ -199,8 +198,20 @@ namespace LLError         static void clear() ;  	   static void end(std::ostringstream* _out) ;     };  + +#if LL_WINDOWS +	void LLOutputDebugUTF8(const std::string& s); +#endif +  } +#if LL_WINDOWS +	// Macro accepting a std::string for display in windows debugging console +	#define LL_WINDOWS_OUTPUT_DEBUG(a) LLError::LLOutputDebugUTF8(a) +#else +	#define LL_WINDOWS_OUTPUT_DEBUG(a) +#endif +  //this is cheaper than llcallstacks if no need to output other variables to call stacks.   #define llpushcallstacks LLError::LLCallStacks::push(__FUNCTION__, __LINE__)  #define llcallstacks \ diff --git a/indra/llui/llxuiparser.cpp b/indra/llui/llxuiparser.cpp index 3ad5ad7d42..6322da9123 100755 --- a/indra/llui/llxuiparser.cpp +++ b/indra/llui/llxuiparser.cpp @@ -1309,10 +1309,8 @@ bool LLXUIParser::writeSDValue(Parser& parser, const void* val_ptr, name_stack_t  void LLXUIParser::parserWarning(const std::string& message)  {  #ifdef LL_WINDOWS -	// use Visual Studo friendly formatting of output message for easy access to originating xml -	llutf16string utf16str = utf8str_to_utf16str(llformat("%s(%d):\t%s", mCurFileName.c_str(), mCurReadNode->getLineNumber(), message.c_str()).c_str()); -	utf16str += '\n'; -	OutputDebugString(utf16str.c_str()); +	// use Visual Studio friendly formatting of output message for easy access to originating xml +	LL_WINDOWS_OUTPUT_DEBUG(llformat("%s(%d):\t%s", mCurFileName.c_str(), mCurReadNode->getLineNumber(), message.c_str()));  #else  	Parser::parserWarning(message);  #endif @@ -1321,9 +1319,8 @@ void LLXUIParser::parserWarning(const std::string& message)  void LLXUIParser::parserError(const std::string& message)  {  #ifdef LL_WINDOWS -	llutf16string utf16str = utf8str_to_utf16str(llformat("%s(%d):\t%s", mCurFileName.c_str(), mCurReadNode->getLineNumber(), message.c_str()).c_str()); -	utf16str += '\n'; -	OutputDebugString(utf16str.c_str()); +        // use Visual Studio friendly formatting of output message for easy access to originating xml +	LL_WINDOWS_OUTPUT_DEBUG(llformat("%s(%d):\t%s", mCurFileName.c_str(), mCurReadNode->getLineNumber(), message.c_str()));  #else  	Parser::parserError(message);  #endif @@ -1640,10 +1637,8 @@ bool LLSimpleXUIParser::processText()  void LLSimpleXUIParser::parserWarning(const std::string& message)  {  #ifdef LL_WINDOWS -	// use Visual Studo friendly formatting of output message for easy access to originating xml -	llutf16string utf16str = utf8str_to_utf16str(llformat("%s(%d):\t%s", mCurFileName.c_str(), LINE_NUMBER_HERE, message.c_str()).c_str()); -	utf16str += '\n'; -	OutputDebugString(utf16str.c_str()); +	// use Visual Studio friendly formatting of output message for easy access to originating xml +	LL_WINDOWS_OUTPUT_DEBUG(llformat("%s(%d):\t%s", mCurFileName.c_str(), LINE_NUMBER_HERE, message.c_str()));  #else  	Parser::parserWarning(message);  #endif @@ -1652,9 +1647,8 @@ void LLSimpleXUIParser::parserWarning(const std::string& message)  void LLSimpleXUIParser::parserError(const std::string& message)  {  #ifdef LL_WINDOWS -	llutf16string utf16str = utf8str_to_utf16str(llformat("%s(%d):\t%s", mCurFileName.c_str(), LINE_NUMBER_HERE, message.c_str()).c_str()); -	utf16str += '\n'; -	OutputDebugString(utf16str.c_str()); +        // use Visual Studio friendly formatting of output message for easy access to originating xml +	LL_WINDOWS_OUTPUT_DEBUG(llformat("%s(%d):\t%s", mCurFileName.c_str(), LINE_NUMBER_HERE, message.c_str()));  #else  	Parser::parserError(message);  #endif diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index 2f6c285a80..d873cab59a 100755 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -1513,6 +1513,10 @@ void LLPanelFace::onSelectColor(const LLSD& data)  void LLPanelFace::onCommitMaterialsMedia(LLUICtrl* ctrl, void* userdata)  {  	LLPanelFace* self = (LLPanelFace*) userdata; +	LLUUID specmap = getCurrentSpecularMap(); +	LLUUID normmap = getCurrentNormalMap(); +	self->updateShinyControls(!specmap.isNull(), true); +	self->updateBumpyControls(!normmap.isNull(), true);  	self->updateUI();  } | 
