diff options
author | Beq <beqjanus@gmail.com> | 2024-02-19 15:13:25 +0000 |
---|---|---|
committer | Andrey Lihatskiy <alihatskiy@productengine.com> | 2024-02-19 18:11:17 +0200 |
commit | fd7f817171f9842470e83832c67d48065e81ca01 (patch) | |
tree | 5be92cc3262f6c4c244bfc8f758c32af21ce53f3 /indra/llcommon | |
parent | 5486d87b566aabb43fa585de3ee86e5bc77391c9 (diff) |
[Linux]gcc is broken for in place template instantiation.
Diffstat (limited to 'indra/llcommon')
-rw-r--r-- | indra/llcommon/llmutex.h | 42 |
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 { |