lock unique and uniqueReleased in same order when both locks are needed

avinationmerge
UbitUmarov 2012-11-02 10:14:08 +00:00
parent e6c8eca504
commit c2639bef8e
1 changed files with 14 additions and 20 deletions

View File

@ -1057,25 +1057,22 @@ namespace OpenSim.Region.Physics.Meshing
mesh.RefCount++;
return mesh;
}
}
// try to find a identical mesh on meshs recently released
lock (m_uniqueReleasedMeshes)
{
m_uniqueReleasedMeshes.TryGetValue(key, out mesh);
if (mesh != null)
// try to find a identical mesh on meshs recently released
lock (m_uniqueReleasedMeshes)
{
m_uniqueReleasedMeshes.Remove(key);
lock (m_uniqueMeshes)
m_uniqueReleasedMeshes.TryGetValue(key, out mesh);
if (mesh != null)
{
m_uniqueReleasedMeshes.Remove(key);
try
{
m_uniqueMeshes.Add(key, mesh);
}
catch { }
mesh.RefCount = 1;
return mesh;
}
mesh.RefCount = 1;
return mesh;
}
}
return null;
@ -1108,25 +1105,22 @@ namespace OpenSim.Region.Physics.Meshing
mesh.RefCount++;
return mesh;
}
}
// try to find a identical mesh on meshs recently released
lock (m_uniqueReleasedMeshes)
{
m_uniqueReleasedMeshes.TryGetValue(key, out mesh);
if (mesh != null)
// try to find a identical mesh on meshs recently released
lock (m_uniqueReleasedMeshes)
{
m_uniqueReleasedMeshes.Remove(key);
lock (m_uniqueMeshes)
m_uniqueReleasedMeshes.TryGetValue(key, out mesh);
if (mesh != null)
{
m_uniqueReleasedMeshes.Remove(key);
try
{
m_uniqueMeshes.Add(key, mesh);
}
catch { }
mesh.RefCount = 1;
return mesh;
}
mesh.RefCount = 1;
return mesh;
}
}