aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/BlockingQueue.cs
diff options
context:
space:
mode:
authordahlia2013-07-16 01:12:56 -0700
committerdahlia2013-07-16 01:12:56 -0700
commit42e2a0d66eaa7e322bce817e9e2cc9a288de167b (patch)
tree729900b87c23267e14ee831e4e0be6be5fc2e8f0 /OpenSim/Framework/BlockingQueue.cs
parentSimplify EventQueue cap setup so that it is also stat monitored. (diff)
downloadopensim-SC-42e2a0d66eaa7e322bce817e9e2cc9a288de167b.zip
opensim-SC-42e2a0d66eaa7e322bce817e9e2cc9a288de167b.tar.gz
opensim-SC-42e2a0d66eaa7e322bce817e9e2cc9a288de167b.tar.bz2
opensim-SC-42e2a0d66eaa7e322bce817e9e2cc9a288de167b.tar.xz
MSDN documentation is unclear about whether exiting a lock() block will trigger a Monitor.Wait() to exit, so avoid some locks that don't actually affect the state of the internal queues in the BlockingQueue class.
Diffstat (limited to 'OpenSim/Framework/BlockingQueue.cs')
-rw-r--r--OpenSim/Framework/BlockingQueue.cs13
1 files changed, 8 insertions, 5 deletions
diff --git a/OpenSim/Framework/BlockingQueue.cs b/OpenSim/Framework/BlockingQueue.cs
index 3658161..cc016b0 100644
--- a/OpenSim/Framework/BlockingQueue.cs
+++ b/OpenSim/Framework/BlockingQueue.cs
@@ -58,7 +58,7 @@ namespace OpenSim.Framework
58 { 58 {
59 lock (m_queueSync) 59 lock (m_queueSync)
60 { 60 {
61 if (m_queue.Count < 1 && m_pqueue.Count < 1) 61 while (m_queue.Count < 1 && m_pqueue.Count < 1)
62 { 62 {
63 Monitor.Wait(m_queueSync); 63 Monitor.Wait(m_queueSync);
64 } 64 }
@@ -91,6 +91,9 @@ namespace OpenSim.Framework
91 91
92 public bool Contains(T item) 92 public bool Contains(T item)
93 { 93 {
94 if (m_queue.Count < 1 && m_pqueue.Count < 1)
95 return false;
96
94 lock (m_queueSync) 97 lock (m_queueSync)
95 { 98 {
96 if (m_pqueue.Contains(item)) 99 if (m_pqueue.Contains(item))
@@ -101,14 +104,14 @@ namespace OpenSim.Framework
101 104
102 public int Count() 105 public int Count()
103 { 106 {
104 lock (m_queueSync) 107 return m_queue.Count+m_pqueue.Count;
105 {
106 return m_queue.Count+m_pqueue.Count;
107 }
108 } 108 }
109 109
110 public T[] GetQueueArray() 110 public T[] GetQueueArray()
111 { 111 {
112 if (m_queue.Count < 1 && m_pqueue.Count < 1)
113 return new T[0];
114
112 lock (m_queueSync) 115 lock (m_queueSync)
113 { 116 {
114 return m_queue.ToArray(); 117 return m_queue.ToArray();