diff options
author | dahlia | 2013-07-16 01:12:56 -0700 |
---|---|---|
committer | dahlia | 2013-07-16 01:12:56 -0700 |
commit | 42e2a0d66eaa7e322bce817e9e2cc9a288de167b (patch) | |
tree | 729900b87c23267e14ee831e4e0be6be5fc2e8f0 /OpenSim | |
parent | Simplify EventQueue cap setup so that it is also stat monitored. (diff) | |
download | opensim-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')
-rw-r--r-- | OpenSim/Framework/BlockingQueue.cs | 13 |
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(); |