diff options
| author | Steve Bennetts <steve@lindenlab.com> | 2009-11-23 17:49:01 -0800 | 
|---|---|---|
| committer | Steve Bennetts <steve@lindenlab.com> | 2009-11-23 17:49:01 -0800 | 
| commit | aec42e3fa2d8a1a4f0c07821821c114d72c339a7 (patch) | |
| tree | 6317ab4db7bebd3974c77c0226a10cc4cb33f4be /indra/llcommon | |
| parent | 7bfa11ed694f9fffa9d8983f3d60f740d630cfc2 (diff) | |
| parent | db79b2d0920bff9bf4f36e8249c0a243581d4c44 (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). | 
