diff options
author | Jonathan Yap <none@none> | 2014-03-06 09:20:54 -0500 |
---|---|---|
committer | Jonathan Yap <none@none> | 2014-03-06 09:20:54 -0500 |
commit | a0f668c0a382ad4bd7a9be703bbcf1edd2bcf460 (patch) | |
tree | 9da9b08465582432d12797951543a30d6c9fc2c1 /indra/llcommon/llthread.cpp | |
parent | 672cc7049777b57a01a61428864ac6e3d10df321 (diff) | |
parent | a5e56067c28298b4df0ef498303f78f67c35782c (diff) |
STORM-68 merge
Diffstat (limited to 'indra/llcommon/llthread.cpp')
-rwxr-xr-x | indra/llcommon/llthread.cpp | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp index 60adeeaeb7..e67d1bc57b 100755 --- a/indra/llcommon/llthread.cpp +++ b/indra/llcommon/llthread.cpp @@ -3,7 +3,7 @@ * * $LicenseInfo:firstyear=2004&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. + * Copyright (C) 2010-2013, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -373,6 +373,36 @@ void LLMutex::lock() #endif } +bool LLMutex::trylock() +{ + if(isSelfLocked()) + { //redundant lock + mCount++; + return true; + } + + apr_status_t status(apr_thread_mutex_trylock(mAPRMutexp)); + if (APR_STATUS_IS_EBUSY(status)) + { + return false; + } + +#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 + +#if LL_DARWIN + mLockingThread = LLThread::currentID(); +#else + mLockingThread = sThreadID; +#endif + return true; +} + void LLMutex::unlock() { if (mCount > 0) |