diff options
Diffstat (limited to 'indra/llcommon')
| -rwxr-xr-x | indra/llcommon/llapp.cpp | 4 | ||||
| -rwxr-xr-x | indra/llcommon/llapr.cpp | 4 | ||||
| -rwxr-xr-x | indra/llcommon/llavatarname.h | 2 | ||||
| -rwxr-xr-x | indra/llcommon/llcoros.cpp | 4 | ||||
| -rwxr-xr-x | indra/llcommon/llerror.cpp | 27 | ||||
| -rwxr-xr-x | indra/llcommon/llerror.h | 13 | ||||
| -rwxr-xr-x | indra/llcommon/llfasttimer.cpp | 2 | ||||
| -rwxr-xr-x | indra/llcommon/llfile.cpp | 24 | ||||
| -rwxr-xr-x | indra/llcommon/llfile.h | 4 | ||||
| -rwxr-xr-x | indra/llcommon/llsdserialize_xml.cpp | 4 | ||||
| -rwxr-xr-x | indra/llcommon/tests/llprocess_test.cpp | 5 | 
11 files changed, 59 insertions, 34 deletions
| diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp index c6da205815..67a98d5fb8 100755 --- a/indra/llcommon/llapp.cpp +++ b/indra/llcommon/llapp.cpp @@ -986,9 +986,9 @@ bool windows_post_minidump_callback(const wchar_t* dump_path,  	}  	llinfos << "generated minidump: " << LLApp::instance()->getMiniDumpFilename() << llendl; -    // *NOTE:Mani - this code is stolen from LLApp, where its never actually used. +   // *NOTE:Mani - this code is stolen from LLApp, where its never actually used.  	//OSMessageBox("Attach Debugger Now", "Error", OSMB_OK); -    // *TODO: Translate the signals/exceptions into cross-platform stuff +   // *TODO: Translate the signals/exceptions into cross-platform stuff  	// Windows implementation  	llinfos << "Entering Windows Exception Handler..." << llendl; diff --git a/indra/llcommon/llapr.cpp b/indra/llcommon/llapr.cpp index d1c44c9403..a0802c6adf 100755 --- a/indra/llcommon/llapr.cpp +++ b/indra/llcommon/llapr.cpp @@ -226,9 +226,7 @@ void LLVolatileAPRPool::clearVolatileAPRPool()  		llassert_always(mNumActiveRef > 0) ;  	} -	//paranoia check if the pool is jammed. -	//will remove the check before going to release. -	llassert_always(mNumTotalRef < (FULL_VOLATILE_APR_POOL << 2)) ; +	llassert(mNumTotalRef < (FULL_VOLATILE_APR_POOL << 2)) ;  }  BOOL LLVolatileAPRPool::isFull() diff --git a/indra/llcommon/llavatarname.h b/indra/llcommon/llavatarname.h index 7542a8dece..5d2fccc5ba 100755 --- a/indra/llcommon/llavatarname.h +++ b/indra/llcommon/llavatarname.h @@ -63,7 +63,7 @@ public:  	// For normal names, returns "James Linden (james.linden)"  	// When display names are disabled returns just "James Linden"  	std::string getCompleteName() const; - +	  	// Returns "James Linden" or "bobsmith123 Resident" for backwards  	// compatibility with systems like voice and muting  	// *TODO: Eliminate this in favor of username only diff --git a/indra/llcommon/llcoros.cpp b/indra/llcommon/llcoros.cpp index a629f71d4b..baaddcaed1 100755 --- a/indra/llcommon/llcoros.cpp +++ b/indra/llcommon/llcoros.cpp @@ -60,7 +60,7 @@ bool LLCoros::cleanup(const LLSD&)          // since last tick?          if (mi->second->exited())          { -            LL_INFOS("LLCoros") << "LLCoros: cleaning up coroutine " << mi->first << LL_ENDL; +			   LL_INFOS("LLCoros") << "LLCoros: cleaning up coroutine " << mi->first << LL_ENDL;              // The erase() call will invalidate its passed iterator value --              // so increment mi FIRST -- but pass its original value to              // erase(). This is what postincrement is all about. @@ -94,7 +94,7 @@ std::string LLCoros::generateDistinctName(const std::string& prefix) const      {          if (mCoros.find(name) == mCoros.end())          { -            LL_INFOS("LLCoros") << "LLCoros: launching coroutine " << name << LL_ENDL; +			   LL_INFOS("LLCoros") << "LLCoros: launching coroutine " << name << LL_ENDL;              return name;          }      } 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/llcommon/llfasttimer.cpp b/indra/llcommon/llfasttimer.cpp index 9b15804e97..024fdd1b4d 100755 --- a/indra/llcommon/llfasttimer.cpp +++ b/indra/llcommon/llfasttimer.cpp @@ -561,7 +561,7 @@ std::vector<LLFastTimer::NamedTimer*>& LLFastTimer::NamedTimer::getChildren()  	return mChildren;  } -// static +//static  LLFastTimer::NamedTimer& LLFastTimer::NamedTimer::getRootNamedTimer()  {          return *NamedTimerFactory::instance().getRootTimer(); diff --git a/indra/llcommon/llfile.cpp b/indra/llcommon/llfile.cpp index 864b6e6975..c3a0f0bfe0 100755 --- a/indra/llcommon/llfile.cpp +++ b/indra/llcommon/llfile.cpp @@ -438,7 +438,7 @@ llstdio_filebuf::int_type llstdio_filebuf::overflow(llstdio_filebuf::int_type __  				_M_set_buffer(0);  				__ret = traits_type::not_eof(__c);  			} -		} +	}  		else if (_M_buf_size > 1)  		{  			// Overflow in 'uncommitted' mode: set _M_writing, set @@ -496,11 +496,11 @@ bool llstdio_filebuf::_convert_to_external(char_type* __ibuf,  		if (__r == codecvt_base::ok || __r == codecvt_base::partial)  			__blen = __bend - __buf;  		else if (__r == codecvt_base::noconv) -		{ +	{  			// Same as the always_noconv case above.  			__buf = reinterpret_cast<char*>(__ibuf);  			__blen = __ilen; -		} +	}  		else  			__throw_ios_failure(__N("llstdio_filebuf::_convert_to_external "  									"conversion error")); @@ -643,9 +643,9 @@ llstdio_filebuf::int_type llstdio_filebuf::underflow()  							_M_ext_end, _M_ext_next,  							this->eback(),  							this->eback() + __buflen, __iend); -				} +}  				if (__r == codecvt_base::noconv) -				{ +{  					size_t __avail = _M_ext_end - _M_ext_buf;  					__ilen = std::min(__avail, __buflen);  					traits_type::copy(this->eback(), @@ -806,15 +806,15 @@ std::streamsize llstdio_filebuf::xsputn(char_type* __s, std::streamsize __n)  				__ret = fwrite(__buf, 1, __buffill, _M_file.file());  			}  			if (__ret == __buffill) -			{ +	{  				__ret += fwrite(reinterpret_cast<const char*>(__s), 1,  								__n, _M_file.file()); -			} +	}  			if (__ret == __buffill + __n)  			{  				_M_set_buffer(0);  				_M_writing = true; -			} +}  			if (__ret > __buffill)  				__ret -= __buffill;  			else @@ -848,7 +848,7 @@ llifstream::llifstream() : _M_filebuf(),  #endif  // explicit -llifstream::llifstream(const std::string& _Filename,  +llifstream::llifstream(const std::string& _Filename,  		ios_base::openmode _Mode) : _M_filebuf(),  #if LL_WINDOWS  	std::istream(&_M_filebuf) @@ -877,7 +877,7 @@ llifstream::llifstream(const char* _Filename,  	if (_M_filebuf.open(wideName.c_str(), _Mode | ios_base::in) == 0)  	{  		_Myios::setstate(ios_base::failbit); -	} +}  }  #else  	std::istream() @@ -951,8 +951,8 @@ void llifstream::close()  #else  		this->setstate(ios_base::failbit);  #endif +		}  	} -}  /************** output file stream ********************************/ @@ -1042,7 +1042,7 @@ void llofstream::open(const char* _Filename, ios_base::openmode _Mode)  #if LL_WINDOWS  	llutf16string wideName = utf8str_to_utf16str( _Filename );  	if (_M_filebuf.open( wideName.c_str(), _Mode | ios_base::out) == 0) -	{ +{  		_Myios::setstate(ios_base::failbit);  	}  	else diff --git a/indra/llcommon/llfile.h b/indra/llcommon/llfile.h index 9d70db96ea..d59e68367e 100755 --- a/indra/llcommon/llfile.h +++ b/indra/llcommon/llfile.h @@ -35,7 +35,7 @@   * Attempts to mostly mirror the POSIX style IO functions.   */ -typedef FILE LLFILE; +typedef FILE	LLFILE;  #include <fstream>  #include <sys/stat.h> @@ -237,7 +237,7 @@ public:  			ios_base::openmode _Mode = ios_base::in,  			//size_t _Size = static_cast<size_t>(BUFSIZ));  			size_t _Size = static_cast<size_t>(1)); - +	  	/**  	 *  @brief  Create a stream using an open file descriptor.  	 *  @param  fd    An open file descriptor. diff --git a/indra/llcommon/llsdserialize_xml.cpp b/indra/llcommon/llsdserialize_xml.cpp index cef743a7be..614a2d5636 100755 --- a/indra/llcommon/llsdserialize_xml.cpp +++ b/indra/llcommon/llsdserialize_xml.cpp @@ -406,7 +406,7 @@ S32 LLSDXMLParser::Impl::parse(std::istream& input, LLSD& data)  		}  		if (mEmitErrors)  		{ -			llinfos << "LLSDXMLParser::Impl::parse: XML_STATUS_ERROR parsing:" << (char*) buffer << llendl; +		llinfos << "LLSDXMLParser::Impl::parse: XML_STATUS_ERROR parsing:" << (char*) buffer << llendl;  		}  		data = LLSD();  		return LLSDParser::PARSE_FAILURE; @@ -487,7 +487,7 @@ S32 LLSDXMLParser::Impl::parseLines(std::istream& input, LLSD& data)  	{  		if (mEmitErrors)  		{ -			llinfos << "LLSDXMLParser::Impl::parseLines: XML_STATUS_ERROR" << llendl; +		llinfos << "LLSDXMLParser::Impl::parseLines: XML_STATUS_ERROR" << llendl;  		}  		return LLSDParser::PARSE_FAILURE;  	} diff --git a/indra/llcommon/tests/llprocess_test.cpp b/indra/llcommon/tests/llprocess_test.cpp index 6f1e7d46b8..f188865eb0 100755 --- a/indra/llcommon/tests/llprocess_test.cpp +++ b/indra/llcommon/tests/llprocess_test.cpp @@ -969,10 +969,7 @@ namespace tut                        childout.getline(), "ok");          // important to get the implicit flush from std::endl          py.mPy->getWritePipe().get_ostream() << "go" << std::endl; -        for (i = 0; i < timeout && py.mPy->isRunning() && ! childout.contains("\n"); ++i) -        { -            yield(); -        } +        waitfor(*py.mPy);          ensure("script never replied", childout.contains("\n"));          ensure_equals("child didn't ack", childout.getline(), "ack");          ensure_equals("bad child termination", py.mPy->getStatus().mState, LLProcess::EXITED); | 
