From ae8d3ab22e3bbbebda97c0bdc70d5c5edf5709c3 Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Fri, 31 Jul 2009 20:53:35 +0000 Subject: * Fix a locking issue in the EventQueue --- .../Framework/EventQueue/EventQueueGetModule.cs | 32 +++++++++++++++------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs index 3f0570e..8230401 100644 --- a/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EventQueue/EventQueueGetModule.cs @@ -329,19 +329,28 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue public bool HasEvents(UUID agentID) { Queue queue = TryGetQueue(agentID); - if (queue.Count > 0) - return true; - else - return false; - + lock (queue) + { + if (queue.Count > 0) + return true; + else + return false; + } + } public Hashtable GetEvents(UUID pAgentId, string request) { Queue queue = TryGetQueue(pAgentId); - OSD element = queue.Dequeue(); // 15s timeout + OSD element; + lock (queue) + { + if (queue.Count == 0) + return NoEvents(); + element = queue.Dequeue(); // 15s timeout + } + - int thisID = 0; lock (m_ids) @@ -357,10 +366,13 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue else { array.Add(element); - while (queue.Count > 0) + lock (queue) { - array.Add(queue.Dequeue()); - thisID++; + while (queue.Count > 0) + { + array.Add(queue.Dequeue()); + thisID++; + } } } -- cgit v1.1