summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/llcommon/llmutex.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/indra/llcommon/llmutex.cpp b/indra/llcommon/llmutex.cpp
index f56c2d08a6..973ecbc87b 100644
--- a/indra/llcommon/llmutex.cpp
+++ b/indra/llcommon/llmutex.cpp
@@ -196,9 +196,18 @@ void LLSharedMutex::lockExclusive()
LLThread::id_t current_thread = LLThread::currentID();
mLockMutex.lock();
- if (mLockingThreads.size() == 1 && mLockingThreads.begin()->first == current_thread)
+ iterator it = mLockingThreads.find(current_thread);
+ if (it != mLockingThreads.end())
{
- mLockingThreads.begin()->second++;
+ if (mIsShared)
+ {
+ // The mutex is already locked in the current thread
+ // but this lock is SHARED (not EXCLISIVE)
+ // We can't lock it again, the lock stays shared
+ // This can lead to a collision (theoretically)
+ llassert_always(!"The current thread is already locked SHARED and can't be locked EXCLUSIVE");
+ }
+ it->second++;
}
else
{