Improve locking when access queue in EventQueueGetModule
parent
ee78c4d2a8
commit
353170589b
|
@ -179,9 +179,10 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
{
|
{
|
||||||
Queue<OSD> queue = GetQueue(avatarID);
|
Queue<OSD> queue = GetQueue(avatarID);
|
||||||
if (queue != null)
|
if (queue != null)
|
||||||
queue.Enqueue(ev);
|
lock (queue)
|
||||||
|
queue.Enqueue(ev);
|
||||||
}
|
}
|
||||||
catch(NullReferenceException e)
|
catch (NullReferenceException e)
|
||||||
{
|
{
|
||||||
m_log.Error("[EVENTQUEUE] Caught exception: " + e);
|
m_log.Error("[EVENTQUEUE] Caught exception: " + e);
|
||||||
return false;
|
return false;
|
||||||
|
@ -338,12 +339,8 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
Queue<OSD> queue = GetQueue(agentID);
|
Queue<OSD> queue = GetQueue(agentID);
|
||||||
if (queue != null)
|
if (queue != null)
|
||||||
lock (queue)
|
lock (queue)
|
||||||
{
|
return queue.Count > 0;
|
||||||
if (queue.Count > 0)
|
|
||||||
return true;
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -358,8 +355,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
element = queue.Dequeue(); // 15s timeout
|
element = queue.Dequeue(); // 15s timeout
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int thisID = 0;
|
int thisID = 0;
|
||||||
lock (m_ids)
|
lock (m_ids)
|
||||||
thisID = m_ids[pAgentId];
|
thisID = m_ids[pAgentId];
|
||||||
|
@ -431,7 +426,10 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
// }
|
// }
|
||||||
|
|
||||||
Queue<OSD> queue = TryGetQueue(agentID);
|
Queue<OSD> queue = TryGetQueue(agentID);
|
||||||
OSD element = queue.Dequeue(); // 15s timeout
|
OSD element;
|
||||||
|
|
||||||
|
lock (queue)
|
||||||
|
element = queue.Dequeue(); // 15s timeout
|
||||||
|
|
||||||
Hashtable responsedata = new Hashtable();
|
Hashtable responsedata = new Hashtable();
|
||||||
|
|
||||||
|
@ -470,10 +468,14 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
array.Add(element);
|
array.Add(element);
|
||||||
while (queue.Count > 0)
|
|
||||||
|
lock (queue)
|
||||||
{
|
{
|
||||||
array.Add(queue.Dequeue());
|
while (queue.Count > 0)
|
||||||
thisID++;
|
{
|
||||||
|
array.Add(queue.Dequeue());
|
||||||
|
thisID++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -520,6 +522,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
AvatarID = m_QueueUUIDAvatarMapping[capUUID];
|
AvatarID = m_QueueUUIDAvatarMapping[capUUID];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (AvatarID != UUID.Zero)
|
if (AvatarID != UUID.Zero)
|
||||||
{
|
{
|
||||||
return ProcessQueue(request, AvatarID, m_scene.CapsModule.GetCapsForUser(AvatarID));
|
return ProcessQueue(request, AvatarID, m_scene.CapsModule.GetCapsForUser(AvatarID));
|
||||||
|
|
Loading…
Reference in New Issue