diff options
| author | Merov Linden <merov@lindenlab.com> | 2010-11-04 14:30:32 -0700 | 
|---|---|---|
| committer | Merov Linden <merov@lindenlab.com> | 2010-11-04 14:30:32 -0700 | 
| commit | f7af29ab40c2405504969a453eba3919be1af5c5 (patch) | |
| tree | f31f6d31582e8ff89c769334cb70e1076c887ef7 /indra/llcommon | |
| parent | c2500f808cd8e1957054d5ec1b3555e30698c2b3 (diff) | |
| parent | 889aff8d87a4dbf3ca43c43bdeed825f67fd5e60 (diff) | |
merge with viewer-development
Diffstat (limited to 'indra/llcommon')
| -rw-r--r-- | indra/llcommon/llapp.cpp | 32 | ||||
| -rw-r--r-- | indra/llcommon/llapp.h | 6 | ||||
| -rw-r--r-- | indra/llcommon/lldictionary.h | 4 | ||||
| -rw-r--r-- | indra/llcommon/llsys.cpp | 20 | ||||
| -rw-r--r-- | indra/llcommon/llsys.h | 3 | 
5 files changed, 64 insertions, 1 deletions
| diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp index eebd5ed0a6..39daefd1ad 100644 --- a/indra/llcommon/llapp.cpp +++ b/indra/llcommon/llapp.cpp @@ -90,6 +90,10 @@ S32 LL_HEARTBEAT_SIGNAL = (SIGRTMAX >= 0) ? (SIGRTMAX-0) : SIGUSR2;  // the static application instance  LLApp* LLApp::sApplication = NULL; +// Allows the generation of core files for post mortem under gdb +// and disables crashlogger +BOOL LLApp::sDisableCrashlogger = FALSE;  +  // Local flag for whether or not to do logging in signal handlers.  //static  BOOL LLApp::sLogInSignal = FALSE; @@ -461,11 +465,30 @@ bool LLApp::isQuitting()  	return (APP_STATUS_QUITTING == sStatus);  } +// static  bool LLApp::isExiting()  {  	return isQuitting() || isError();  } +void LLApp::disableCrashlogger() +{ +	// Disable Breakpad exception handler. +	if (mExceptionHandler != 0) +	{ +		delete mExceptionHandler; +		mExceptionHandler = 0; +	} + +	sDisableCrashlogger = TRUE; +} + +// static +bool LLApp::isCrashloggerDisabled() +{ +	return (sDisableCrashlogger == TRUE);  +} +  #if !LL_WINDOWS  // static  U32 LLApp::getSigChildCount() @@ -799,6 +822,15 @@ void default_unix_signal_handler(int signum, siginfo_t *info, void *)  			{  				llwarns << "Signal handler - Flagging error status and waiting for shutdown" << llendl;  			} +									 +			if (LLApp::isCrashloggerDisabled())	// Don't gracefully handle any signal, crash and core for a gdb post mortem +			{ +				clear_signals(); +				llwarns << "Fatal signal received, not handling the crash here, passing back to operating system" << llendl; +				raise(signum); +				return; +			}		 +			  			// Flag status to ERROR, so thread_error does its work.  			LLApp::setError();  			// Block in the signal handler until somebody says that we're done. diff --git a/indra/llcommon/llapp.h b/indra/llcommon/llapp.h index ee1d696829..a536a06ea5 100644 --- a/indra/llcommon/llapp.h +++ b/indra/llcommon/llapp.h @@ -189,6 +189,11 @@ public:  	//  	virtual bool mainLoop() = 0; // Override for the application main loop.  Needs to at least gracefully notice the QUITTING state and exit. +	// +	// Crash logging +	// +	void disableCrashlogger();				// Let the OS handle the crashes +	static bool isCrashloggerDisabled();	// Get the here above set value  	//  	// Application status @@ -280,6 +285,7 @@ protected:  	static void setStatus(EAppStatus status);		// Use this to change the application status.  	static EAppStatus sStatus; // Reflects current application status  	static BOOL sErrorThreadRunning; // Set while the error thread is running +	static BOOL sDisableCrashlogger; // Let the OS handle crashes for us.  #if !LL_WINDOWS  	static LLAtomicU32* sSigChildCount; // Number of SIGCHLDs received. diff --git a/indra/llcommon/lldictionary.h b/indra/llcommon/lldictionary.h index 552a805b70..bc3bc3e74a 100644 --- a/indra/llcommon/lldictionary.h +++ b/indra/llcommon/lldictionary.h @@ -78,7 +78,9 @@ protected:  	virtual Index notFound() const  	{  		// default is to assert -		llassert(false); +		// don't assert -- makes it impossible to work on mesh-development and viewer-development simultaneously +		//			-- davep 2010.10.29 +		//llassert(false);  		return Index(-1);  	}  	void addEntry(Index index, Entry *entry) diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp index 00c94404d4..10cdc7087b 100644 --- a/indra/llcommon/llsys.cpp +++ b/indra/llcommon/llsys.cpp @@ -635,6 +635,26 @@ U32 LLMemoryInfo::getPhysicalMemoryClamped() const  	}  } +//static +void LLMemoryInfo::getAvailableMemoryKB(U32& avail_physical_mem_kb, U32& avail_virtual_mem_kb) +{ +#if LL_WINDOWS +	MEMORYSTATUSEX state; +	state.dwLength = sizeof(state); +	GlobalMemoryStatusEx(&state); + +	avail_physical_mem_kb = (U32)(state.ullAvailPhys/1024) ; +	avail_virtual_mem_kb = (U32)(state.ullAvailVirtual/1024) ; + +#else +	//do not know how to collect available memory info for other systems. +	//leave it blank here for now. + +	avail_physical_mem_kb = -1 ; +	avail_virtual_mem_kb = -1 ; +#endif +} +  void LLMemoryInfo::stream(std::ostream& s) const  {  #if LL_WINDOWS diff --git a/indra/llcommon/llsys.h b/indra/llcommon/llsys.h index 39af74e5c8..41a4f25000 100644 --- a/indra/llcommon/llsys.h +++ b/indra/llcommon/llsys.h @@ -114,6 +114,9 @@ public:  	**  be returned.  	*/  	U32 getPhysicalMemoryClamped() const; ///< Memory size in clamped bytes + +	//get the available memory infomation in KiloBytes. +	static void getAvailableMemoryKB(U32& avail_physical_mem_kb, U32& avail_virtual_mem_kb);  }; | 
