(almost) useless change
parent
b242232c7b
commit
040ab65f68
|
@ -51,7 +51,14 @@ namespace OpenSim.Framework
|
|||
private object m_syncRoot = new object();
|
||||
|
||||
/// <summary>Number of clients in the collection</summary>
|
||||
public int Count { get { return m_dict1.Count; } }
|
||||
public int Count
|
||||
{
|
||||
get
|
||||
{
|
||||
lock (m_syncRoot)
|
||||
return m_dict1.Count;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor
|
||||
|
@ -60,7 +67,7 @@ namespace OpenSim.Framework
|
|||
{
|
||||
m_dict1 = new Dictionary<UUID, IClientAPI>();
|
||||
m_dict2 = new Dictionary<IPEndPoint, IClientAPI>();
|
||||
m_array = new IClientAPI[0];
|
||||
m_array = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -74,17 +81,9 @@ namespace OpenSim.Framework
|
|||
{
|
||||
lock (m_syncRoot)
|
||||
{
|
||||
// allow self healing
|
||||
// if (m_dict1.ContainsKey(value.AgentId) || m_dict2.ContainsKey(value.RemoteEndPoint))
|
||||
// return false;
|
||||
|
||||
m_dict1[value.AgentId] = value;
|
||||
m_dict2[value.RemoteEndPoint] = value;
|
||||
|
||||
// dict1 is the master
|
||||
IClientAPI[] newArray = new IClientAPI[m_dict1.Count];
|
||||
m_dict1.Values.CopyTo(newArray, 0);
|
||||
m_array = newArray;
|
||||
m_array = null;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -105,10 +104,7 @@ namespace OpenSim.Framework
|
|||
{
|
||||
m_dict1.Remove(key);
|
||||
m_dict2.Remove(value.RemoteEndPoint);
|
||||
|
||||
IClientAPI[] newArray = new IClientAPI[m_dict1.Count];
|
||||
m_dict1.Values.CopyTo(newArray, 0);
|
||||
m_array = newArray;
|
||||
m_array = null;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -124,7 +120,7 @@ namespace OpenSim.Framework
|
|||
{
|
||||
m_dict1.Clear();
|
||||
m_dict2.Clear();
|
||||
m_array = new IClientAPI[0];
|
||||
m_array = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -135,6 +131,7 @@ namespace OpenSim.Framework
|
|||
/// <returns>True if the UUID was found in the collection, otherwise false</returns>
|
||||
public bool ContainsKey(UUID key)
|
||||
{
|
||||
lock (m_syncRoot)
|
||||
return m_dict1.ContainsKey(key);
|
||||
}
|
||||
|
||||
|
@ -145,6 +142,7 @@ namespace OpenSim.Framework
|
|||
/// <returns>True if the endpoint was found in the collection, otherwise false</returns>
|
||||
public bool ContainsKey(IPEndPoint key)
|
||||
{
|
||||
lock (m_syncRoot)
|
||||
return m_dict2.ContainsKey(key);
|
||||
}
|
||||
|
||||
|
@ -156,8 +154,12 @@ namespace OpenSim.Framework
|
|||
/// <returns>True if the lookup succeeded, otherwise false</returns>
|
||||
public bool TryGetValue(UUID key, out IClientAPI value)
|
||||
{
|
||||
try { return m_dict1.TryGetValue(key, out value); }
|
||||
catch (Exception)
|
||||
try
|
||||
{
|
||||
lock (m_syncRoot)
|
||||
return m_dict1.TryGetValue(key, out value);
|
||||
}
|
||||
catch
|
||||
{
|
||||
value = null;
|
||||
return false;
|
||||
|
@ -172,8 +174,12 @@ namespace OpenSim.Framework
|
|||
/// <returns>True if the lookup succeeded, otherwise false</returns>
|
||||
public bool TryGetValue(IPEndPoint key, out IClientAPI value)
|
||||
{
|
||||
try { return m_dict2.TryGetValue(key, out value); }
|
||||
catch (Exception)
|
||||
try
|
||||
{
|
||||
lock (m_syncRoot)
|
||||
return m_dict2.TryGetValue(key, out value);
|
||||
}
|
||||
catch
|
||||
{
|
||||
value = null;
|
||||
return false;
|
||||
|
@ -187,7 +193,20 @@ namespace OpenSim.Framework
|
|||
/// <param name="action">Action to perform on each element</param>
|
||||
public void ForEach(Action<IClientAPI> action)
|
||||
{
|
||||
IClientAPI[] localArray = m_array;
|
||||
IClientAPI[] localArray;
|
||||
lock (m_syncRoot)
|
||||
{
|
||||
if (m_array == null)
|
||||
{
|
||||
if (m_dict1.Count == 0)
|
||||
return;
|
||||
|
||||
m_array = new IClientAPI[m_dict1.Count];
|
||||
m_dict1.Values.CopyTo(m_array, 0);
|
||||
}
|
||||
localArray = m_array;
|
||||
}
|
||||
|
||||
for (int i = 0; i < localArray.Length; i++)
|
||||
action(localArray[i]);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue