diff options
| author | Rick Pasetto <rick@lindenlab.com> | 2009-11-25 09:54:19 -0800 | 
|---|---|---|
| committer | Rick Pasetto <rick@lindenlab.com> | 2009-11-25 09:54:19 -0800 | 
| commit | 05ae52a37f9f4d2519c40fe38f1b7143270c46ee (patch) | |
| tree | ba3ea89cda34343550a909700f53ab18043a5d4a /indra/llcommon | |
| parent | e2e7d544b6a114e70e3b46f516a4f0e8d7db4bd1 (diff) | |
| parent | 46b36d4fde4de97cd9960553ea77a64fbbe34b6a (diff) | |
merge
Diffstat (limited to 'indra/llcommon')
| -rw-r--r-- | indra/llcommon/llthread.cpp | 18 | ||||
| -rw-r--r-- | indra/llcommon/llthread.h | 5 | 
2 files changed, 21 insertions, 2 deletions
diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp index 920d8c0977..37370e44e7 100644 --- a/indra/llcommon/llthread.cpp +++ b/indra/llcommon/llthread.cpp @@ -291,8 +291,8 @@ LLMutex::LLMutex(apr_pool_t *poolp) :  LLMutex::~LLMutex()  { -#if _DEBUG -	llassert(!isLocked()); // better not be locked! +#if MUTEX_DEBUG +	llassert_always(!isLocked()); // better not be locked!  #endif  	apr_thread_mutex_destroy(mAPRMutexp);  	mAPRMutexp = NULL; @@ -306,10 +306,24 @@ LLMutex::~LLMutex()  void LLMutex::lock()  {  	apr_thread_mutex_lock(mAPRMutexp); +#if MUTEX_DEBUG +	// Have to have the lock before we can access the debug info +	U32 id = LLThread::currentID(); +	if (mIsLocked[id] != FALSE) +		llerrs << "Already locked in Thread: " << id << llendl; +	mIsLocked[id] = TRUE; +#endif  }  void LLMutex::unlock()  { +#if MUTEX_DEBUG +	// Access the debug info while we have the lock +	U32 id = LLThread::currentID(); +	if (mIsLocked[id] != TRUE) +		llerrs << "Not locked in Thread: " << id << llendl;	 +	mIsLocked[id] = FALSE; +#endif  	apr_thread_mutex_unlock(mAPRMutexp);  } diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h index 932d96d940..d8aa90de2e 100644 --- a/indra/llcommon/llthread.h +++ b/indra/llcommon/llthread.h @@ -128,6 +128,8 @@ protected:  //============================================================================ +#define MUTEX_DEBUG (LL_DEBUG || LL_RELEASE_WITH_DEBUG_INFO) +  class LL_COMMON_API LLMutex  {  public: @@ -142,6 +144,9 @@ protected:  	apr_thread_mutex_t *mAPRMutexp;  	apr_pool_t			*mAPRPoolp;  	BOOL				mIsLocalPool; +#if MUTEX_DEBUG +	std::map<U32, BOOL> mIsLocked; +#endif  };  // Actually a condition/mutex pair (since each condition needs to be associated with a mutex).  | 
