From 877a02dba1df8a5d7d9f40b04d6be834ed9864da Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 24 Nov 2021 09:38:56 -0500 Subject: SL-16094: Fix merge glitches from previous revert. --- indra/llcommon/llthreadsafequeue.h | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/indra/llcommon/llthreadsafequeue.h b/indra/llcommon/llthreadsafequeue.h index a588175074..2806506550 100644 --- a/indra/llcommon/llthreadsafequeue.h +++ b/indra/llcommon/llthreadsafequeue.h @@ -85,8 +85,8 @@ public: LLThreadSafeQueue(U32 capacity = 1024); virtual ~LLThreadSafeQueue() {} - // Add an element to the queue (will block if the queue has - // reached capacity). + // Add an element to the queue (will block if the queue has reached + // capacity). // // This call will raise an interrupt error if the queue is closed while // the caller is blocked. @@ -95,6 +95,11 @@ public: // legacy name void pushFront(ElementT const & element) { return push(element); } + // Add an element to the queue (will block if the queue has reached + // capacity). Return false if the queue is closed before push is possible. + template + bool pushIfOpen(T&& element); + // Try to add an element to the queue without blocking. Returns // true only if the element was actually added. template @@ -314,8 +319,8 @@ bool LLThreadSafeQueue::push_(lock_t& lock, T&& element) template -template -void LLThreadSafeQueue::push(T&& element) +template +bool LLThreadSafeQueue::pushIfOpen(T&& element) { LL_PROFILE_ZONE_SCOPED; lock_t lock1(mLock); @@ -325,12 +330,10 @@ void LLThreadSafeQueue::push(T&& element) // drained or not: the moment either end calls close(), further push() // operations will fail. if (mClosed) - { - LLTHROW(LLThreadSafeQueueInterrupt()); - } + return false; if (push_(lock1, std::forward(element))) - return; + return true; // Storage Full. Wait for signal. mCapacityCond.wait(lock1); -- cgit v1.2.3