aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorUbitUmarov2012-11-02 10:14:08 +0000
committerUbitUmarov2012-11-02 10:14:08 +0000
commitc2639bef8e981e49fef09dfd9c54442ba500e9d4 (patch)
treec070cfbaaf0e0429dc74e7268279461f1fbdd46e
parentMerge branch 'avination' into ubitwork (diff)
downloadopensim-SC-c2639bef8e981e49fef09dfd9c54442ba500e9d4.zip
opensim-SC-c2639bef8e981e49fef09dfd9c54442ba500e9d4.tar.gz
opensim-SC-c2639bef8e981e49fef09dfd9c54442ba500e9d4.tar.bz2
opensim-SC-c2639bef8e981e49fef09dfd9c54442ba500e9d4.tar.xz
lock unique and uniqueReleased in same order when both locks are needed
-rw-r--r--OpenSim/Region/Physics/UbitMeshing/Meshmerizer.cs34
1 files changed, 14 insertions, 20 deletions
diff --git a/OpenSim/Region/Physics/UbitMeshing/Meshmerizer.cs b/OpenSim/Region/Physics/UbitMeshing/Meshmerizer.cs
index 29fdda4..6e1a105 100644
--- a/OpenSim/Region/Physics/UbitMeshing/Meshmerizer.cs
+++ b/OpenSim/Region/Physics/UbitMeshing/Meshmerizer.cs
@@ -1057,25 +1057,22 @@ namespace OpenSim.Region.Physics.Meshing
1057 mesh.RefCount++; 1057 mesh.RefCount++;
1058 return mesh; 1058 return mesh;
1059 } 1059 }
1060 }
1061 1060
1062 // try to find a identical mesh on meshs recently released 1061 // try to find a identical mesh on meshs recently released
1063 lock (m_uniqueReleasedMeshes) 1062 lock (m_uniqueReleasedMeshes)
1064 {
1065 m_uniqueReleasedMeshes.TryGetValue(key, out mesh);
1066 if (mesh != null)
1067 { 1063 {
1068 m_uniqueReleasedMeshes.Remove(key); 1064 m_uniqueReleasedMeshes.TryGetValue(key, out mesh);
1069 lock (m_uniqueMeshes) 1065 if (mesh != null)
1070 { 1066 {
1067 m_uniqueReleasedMeshes.Remove(key);
1071 try 1068 try
1072 { 1069 {
1073 m_uniqueMeshes.Add(key, mesh); 1070 m_uniqueMeshes.Add(key, mesh);
1074 } 1071 }
1075 catch { } 1072 catch { }
1073 mesh.RefCount = 1;
1074 return mesh;
1076 } 1075 }
1077 mesh.RefCount = 1;
1078 return mesh;
1079 } 1076 }
1080 } 1077 }
1081 return null; 1078 return null;
@@ -1108,25 +1105,22 @@ namespace OpenSim.Region.Physics.Meshing
1108 mesh.RefCount++; 1105 mesh.RefCount++;
1109 return mesh; 1106 return mesh;
1110 } 1107 }
1111 }
1112 1108
1113 // try to find a identical mesh on meshs recently released 1109 // try to find a identical mesh on meshs recently released
1114 lock (m_uniqueReleasedMeshes) 1110 lock (m_uniqueReleasedMeshes)
1115 {
1116 m_uniqueReleasedMeshes.TryGetValue(key, out mesh);
1117 if (mesh != null)
1118 { 1111 {
1119 m_uniqueReleasedMeshes.Remove(key); 1112 m_uniqueReleasedMeshes.TryGetValue(key, out mesh);
1120 lock (m_uniqueMeshes) 1113 if (mesh != null)
1121 { 1114 {
1115 m_uniqueReleasedMeshes.Remove(key);
1122 try 1116 try
1123 { 1117 {
1124 m_uniqueMeshes.Add(key, mesh); 1118 m_uniqueMeshes.Add(key, mesh);
1125 } 1119 }
1126 catch { } 1120 catch { }
1121 mesh.RefCount = 1;
1122 return mesh;
1127 } 1123 }
1128 mesh.RefCount = 1;
1129 return mesh;
1130 } 1124 }
1131 } 1125 }
1132 1126