diff options
author | Robert Adams | 2015-12-27 15:05:17 -0800 |
---|---|---|
committer | Robert Adams | 2015-12-27 15:05:17 -0800 |
commit | 7831d219d7e42169d5cd86cf4fabaf3feca2e256 (patch) | |
tree | ba79904674ba4a74285f269fac873ca71f8a5d5b /OpenSim/Framework/Monitoring/StatsManager.cs | |
parent | ubMeshmerizer: remove some wrong faces still present in taper cases, some cod... (diff) | |
download | opensim-SC-7831d219d7e42169d5cd86cf4fabaf3feca2e256.zip opensim-SC-7831d219d7e42169d5cd86cf4fabaf3feca2e256.tar.gz opensim-SC-7831d219d7e42169d5cd86cf4fabaf3feca2e256.tar.bz2 opensim-SC-7831d219d7e42169d5cd86cf4fabaf3feca2e256.tar.xz |
Add locking around stats record fetch to resolve Mantis 7793.
Diffstat (limited to 'OpenSim/Framework/Monitoring/StatsManager.cs')
-rw-r--r-- | OpenSim/Framework/Monitoring/StatsManager.cs | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/OpenSim/Framework/Monitoring/StatsManager.cs b/OpenSim/Framework/Monitoring/StatsManager.cs index d0d1947..8787ea0 100644 --- a/OpenSim/Framework/Monitoring/StatsManager.cs +++ b/OpenSim/Framework/Monitoring/StatsManager.cs | |||
@@ -262,33 +262,36 @@ namespace OpenSim.Framework.Monitoring | |||
262 | { | 262 | { |
263 | OSDMap map = new OSDMap(); | 263 | OSDMap map = new OSDMap(); |
264 | 264 | ||
265 | foreach (string catName in RegisteredStats.Keys) | 265 | lock (RegisteredStats) |
266 | { | 266 | { |
267 | // Do this category if null spec, "all" subcommand or category name matches passed parameter. | 267 | foreach (string catName in RegisteredStats.Keys) |
268 | // Skip category if none of the above. | ||
269 | if (!(String.IsNullOrEmpty(pCategoryName) || pCategoryName == AllSubCommand || pCategoryName == catName)) | ||
270 | continue; | ||
271 | |||
272 | OSDMap contMap = new OSDMap(); | ||
273 | foreach (string contName in RegisteredStats[catName].Keys) | ||
274 | { | 268 | { |
275 | if (!(string.IsNullOrEmpty(pContainerName) || pContainerName == AllSubCommand || pContainerName == contName)) | 269 | // Do this category if null spec, "all" subcommand or category name matches passed parameter. |
270 | // Skip category if none of the above. | ||
271 | if (!(String.IsNullOrEmpty(pCategoryName) || pCategoryName == AllSubCommand || pCategoryName == catName)) | ||
276 | continue; | 272 | continue; |
277 | |||
278 | OSDMap statMap = new OSDMap(); | ||
279 | 273 | ||
280 | SortedDictionary<string, Stat> theStats = RegisteredStats[catName][contName]; | 274 | OSDMap contMap = new OSDMap(); |
281 | foreach (string statName in theStats.Keys) | 275 | foreach (string contName in RegisteredStats[catName].Keys) |
282 | { | 276 | { |
283 | if (!(String.IsNullOrEmpty(pStatName) || pStatName == AllSubCommand || pStatName == statName)) | 277 | if (!(string.IsNullOrEmpty(pContainerName) || pContainerName == AllSubCommand || pContainerName == contName)) |
284 | continue; | 278 | continue; |
279 | |||
280 | OSDMap statMap = new OSDMap(); | ||
285 | 281 | ||
286 | statMap.Add(statName, theStats[statName].ToBriefOSDMap()); | 282 | SortedDictionary<string, Stat> theStats = RegisteredStats[catName][contName]; |
287 | } | 283 | foreach (string statName in theStats.Keys) |
284 | { | ||
285 | if (!(String.IsNullOrEmpty(pStatName) || pStatName == AllSubCommand || pStatName == statName)) | ||
286 | continue; | ||
288 | 287 | ||
289 | contMap.Add(contName, statMap); | 288 | statMap.Add(statName, theStats[statName].ToBriefOSDMap()); |
289 | } | ||
290 | |||
291 | contMap.Add(contName, statMap); | ||
292 | } | ||
293 | map.Add(catName, contMap); | ||
290 | } | 294 | } |
291 | map.Add(catName, contMap); | ||
292 | } | 295 | } |
293 | 296 | ||
294 | return map; | 297 | return map; |