From 7df325c275c90d5be750082a9b8dafd92ef14669 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Tue, 18 Mar 2014 23:05:49 +0000 Subject: Extend locking in BlockingQueue to cover operations that are not guaranteed to be thread-safe --- OpenSim/Framework/BlockingQueue.cs | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) (limited to 'OpenSim') diff --git a/OpenSim/Framework/BlockingQueue.cs b/OpenSim/Framework/BlockingQueue.cs index 3e90fac..d11ad11 100644 --- a/OpenSim/Framework/BlockingQueue.cs +++ b/OpenSim/Framework/BlockingQueue.cs @@ -98,11 +98,11 @@ namespace OpenSim.Framework /// public bool Contains(T item) { - if (m_queue.Count < 1 && m_pqueue.Count < 1) - return false; - lock (m_queueSync) { + if (m_queue.Count < 1 && m_pqueue.Count < 1) + return false; + if (m_pqueue.Contains(item)) return true; return m_queue.Contains(item); @@ -112,12 +112,10 @@ namespace OpenSim.Framework /// /// Return a count of the number of requests on this queue. /// - /// - /// This method is not thread-safe. Do not rely on the result without consistent external locking. - /// public int Count() { - return m_queue.Count + m_pqueue.Count; + lock (m_queueSync) + return m_queue.Count + m_pqueue.Count; } /// @@ -128,11 +126,11 @@ namespace OpenSim.Framework /// public T[] GetQueueArray() { - if (m_queue.Count < 1 && m_pqueue.Count < 1) - return new T[0]; - lock (m_queueSync) { + if (m_queue.Count < 1 && m_pqueue.Count < 1) + return new T[0]; + return m_queue.ToArray(); } } -- cgit v1.1