summaryrefslogtreecommitdiff
path: root/indra/llcommon
diff options
context:
space:
mode:
authorBeq <beqjanus@gmail.com>2024-02-19 15:13:25 +0000
committerAndrey Lihatskiy <alihatskiy@productengine.com>2024-02-19 18:11:17 +0200
commitfd7f817171f9842470e83832c67d48065e81ca01 (patch)
tree5be92cc3262f6c4c244bfc8f758c32af21ce53f3 /indra/llcommon
parent5486d87b566aabb43fa585de3ee86e5bc77391c9 (diff)
[Linux]gcc is broken for in place template instantiation.
Diffstat (limited to 'indra/llcommon')
-rw-r--r--indra/llcommon/llmutex.h42
1 files changed, 36 insertions, 6 deletions
diff --git a/indra/llcommon/llmutex.h b/indra/llcommon/llmutex.h
index 077f810d61..cef58c1c9d 100644
--- a/indra/llcommon/llmutex.h
+++ b/indra/llcommon/llmutex.h
@@ -82,20 +82,14 @@ public:
void lockShared();
void lockExclusive();
template<bool SHARED> void lock();
- template<> void lock<true>() { lockShared(); }
- template<> void lock<false>() { lockExclusive(); }
bool trylockShared();
bool trylockExclusive();
template<bool SHARED> bool trylock();
- template<> bool trylock<true>() { return trylockShared(); }
- template<> bool trylock<false>() { return trylockExclusive(); }
void unlockShared();
void unlockExclusive();
template<bool SHARED> void unlock();
- template<> void unlock<true>() { unlockShared(); }
- template<> void unlock<false>() { unlockExclusive(); }
private:
std::shared_mutex mSharedMutex;
@@ -107,6 +101,42 @@ private:
using const_iterator = std::unordered_map<LLThread::id_t, U32>::const_iterator;
};
+template<>
+inline void LLSharedMutex::lock<true>()
+{
+ lockShared();
+}
+
+template<>
+inline void LLSharedMutex::lock<false>()
+{
+ lockExclusive();
+}
+
+template<>
+inline bool LLSharedMutex::trylock<true>()
+{
+ return trylockShared();
+}
+
+template<>
+inline bool LLSharedMutex::trylock<false>()
+{
+ return trylockExclusive();
+}
+
+template<>
+inline void LLSharedMutex::unlock<true>()
+{
+ unlockShared();
+}
+
+template<>
+inline void LLSharedMutex::unlock<false>()
+{
+ unlockExclusive();
+}
+
// Actually a condition/mutex pair (since each condition needs to be associated with a mutex).
class LL_COMMON_API LLCondition : public LLMutex
{