diff options
author | John Hurliman | 2009-10-23 01:02:36 -0700 |
---|---|---|
committer | John Hurliman | 2009-10-23 01:02:36 -0700 |
commit | 588361e2a2398b963871762c2b5485c6a086cf47 (patch) | |
tree | 5be2c6705096817c599075da4e12a0e9b0a4c841 /OpenSim/Region/Framework/Scenes/SceneManager.cs | |
parent | Added VS2010 support to Prebuild and created runprebuild2010.bat (diff) | |
download | opensim-SC_OLD-588361e2a2398b963871762c2b5485c6a086cf47.zip opensim-SC_OLD-588361e2a2398b963871762c2b5485c6a086cf47.tar.gz opensim-SC_OLD-588361e2a2398b963871762c2b5485c6a086cf47.tar.bz2 opensim-SC_OLD-588361e2a2398b963871762c2b5485c6a086cf47.tar.xz |
Experimental change to use an immutable array for iterating ScenePresences, avoiding locking and copying the list each time it is accessed
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneManager.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneManager.cs | 53 |
1 files changed, 29 insertions, 24 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneManager.cs b/OpenSim/Region/Framework/Scenes/SceneManager.cs index 3097929..dfaa7ea 100644 --- a/OpenSim/Region/Framework/Scenes/SceneManager.cs +++ b/OpenSim/Region/Framework/Scenes/SceneManager.cs | |||
@@ -411,41 +411,46 @@ namespace OpenSim.Region.Framework.Scenes | |||
411 | /// <param name="newDebug"></param> | 411 | /// <param name="newDebug"></param> |
412 | public void SetDebugPacketLevelOnCurrentScene(int newDebug) | 412 | public void SetDebugPacketLevelOnCurrentScene(int newDebug) |
413 | { | 413 | { |
414 | ForEachCurrentScene(delegate(Scene scene) | 414 | ForEachCurrentScene( |
415 | { | 415 | delegate(Scene scene) |
416 | List<ScenePresence> scenePresences = scene.GetScenePresences(); | 416 | { |
417 | ScenePresence[] scenePresences = scene.GetScenePresences(); | ||
418 | |||
419 | for (int i = 0; i < scenePresences.Length; i++) | ||
420 | { | ||
421 | ScenePresence scenePresence = scenePresences[i]; | ||
417 | 422 | ||
418 | foreach (ScenePresence scenePresence in scenePresences) | 423 | if (!scenePresence.IsChildAgent) |
419 | { | 424 | { |
420 | if (!scenePresence.IsChildAgent) | 425 | m_log.ErrorFormat("Packet debug for {0} {1} set to {2}", |
421 | { | 426 | scenePresence.Firstname, |
422 | m_log.ErrorFormat("Packet debug for {0} {1} set to {2}", | 427 | scenePresence.Lastname, |
423 | scenePresence.Firstname, | 428 | newDebug); |
424 | scenePresence.Lastname, | ||
425 | newDebug); | ||
426 | 429 | ||
427 | scenePresence.ControllingClient.SetDebugPacketLevel(newDebug); | 430 | scenePresence.ControllingClient.SetDebugPacketLevel(newDebug); |
428 | } | 431 | } |
429 | } | 432 | } |
430 | }); | 433 | } |
434 | ); | ||
431 | } | 435 | } |
432 | 436 | ||
433 | public List<ScenePresence> GetCurrentSceneAvatars() | 437 | public List<ScenePresence> GetCurrentSceneAvatars() |
434 | { | 438 | { |
435 | List<ScenePresence> avatars = new List<ScenePresence>(); | 439 | List<ScenePresence> avatars = new List<ScenePresence>(); |
436 | 440 | ||
437 | ForEachCurrentScene(delegate(Scene scene) | 441 | ForEachCurrentScene( |
438 | { | 442 | delegate(Scene scene) |
439 | List<ScenePresence> scenePresences = scene.GetScenePresences(); | ||
440 | |||
441 | foreach (ScenePresence scenePresence in scenePresences) | ||
442 | { | 443 | { |
443 | if (!scenePresence.IsChildAgent) | 444 | ScenePresence[] scenePresences = scene.GetScenePresences(); |
445 | |||
446 | for (int i = 0; i < scenePresences.Length; i++) | ||
444 | { | 447 | { |
445 | avatars.Add(scenePresence); | 448 | ScenePresence scenePresence = scenePresences[i]; |
449 | if (!scenePresence.IsChildAgent) | ||
450 | avatars.Add(scenePresence); | ||
446 | } | 451 | } |
447 | } | 452 | } |
448 | }); | 453 | ); |
449 | 454 | ||
450 | return avatars; | 455 | return avatars; |
451 | } | 456 | } |
@@ -456,7 +461,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
456 | 461 | ||
457 | ForEachCurrentScene(delegate(Scene scene) | 462 | ForEachCurrentScene(delegate(Scene scene) |
458 | { | 463 | { |
459 | List<ScenePresence> scenePresences = scene.GetScenePresences(); | 464 | ScenePresence[] scenePresences = scene.GetScenePresences(); |
460 | presences.AddRange(scenePresences); | 465 | presences.AddRange(scenePresences); |
461 | }); | 466 | }); |
462 | 467 | ||