aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJohn Hurliman2009-10-27 02:36:57 -0700
committerJohn Hurliman2009-10-27 02:36:57 -0700
commit3a1ee79ee4239213b35f6b73a65c127c2af977fb (patch)
tree4743f5eb7c12b3723ed4b986d19714d1b3a0a3ea
parent* Tweak to region module loading to check for a matching constructor first in... (diff)
downloadopensim-SC-3a1ee79ee4239213b35f6b73a65c127c2af977fb.zip
opensim-SC-3a1ee79ee4239213b35f6b73a65c127c2af977fb.tar.gz
opensim-SC-3a1ee79ee4239213b35f6b73a65c127c2af977fb.tar.bz2
opensim-SC-3a1ee79ee4239213b35f6b73a65c127c2af977fb.tar.xz
Finally hunted down the Parallel deadlock. Packets were being handled asynchronously (filling up the threadpool with handlers), which would turn around and try to do parallel operations on the starved threadpool. The solution for now is to disable Parallel.cs operations until we can gracefully handle parallel operations with a potentially starved threadpool
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs15
-rw-r--r--bin/OpenSim.ini.example2
2 files changed, 10 insertions, 7 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 6c34056..42051d0 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -120,7 +120,7 @@ namespace OpenSim.Region.Framework.Scenes
120 private readonly Timer m_restartTimer = new Timer(15000); // Wait before firing 120 private readonly Timer m_restartTimer = new Timer(15000); // Wait before firing
121 private int m_incrementsof15seconds; 121 private int m_incrementsof15seconds;
122 private volatile bool m_backingup; 122 private volatile bool m_backingup;
123 private bool m_useAsyncWhenPossible = true; 123 private bool m_useAsyncWhenPossible;
124 124
125 private Dictionary<UUID, ReturnInfo> m_returns = new Dictionary<UUID, ReturnInfo>(); 125 private Dictionary<UUID, ReturnInfo> m_returns = new Dictionary<UUID, ReturnInfo>();
126 private Dictionary<UUID, SceneObjectGroup> m_groupsWithTargets = new Dictionary<UUID, SceneObjectGroup>(); 126 private Dictionary<UUID, SceneObjectGroup> m_groupsWithTargets = new Dictionary<UUID, SceneObjectGroup>();
@@ -480,7 +480,7 @@ namespace OpenSim.Region.Framework.Scenes
480 IConfig startupConfig = m_config.Configs["Startup"]; 480 IConfig startupConfig = m_config.Configs["Startup"];
481 481
482 // Should we try to run loops synchronously or asynchronously? 482 // Should we try to run loops synchronously or asynchronously?
483 m_useAsyncWhenPossible = startupConfig.GetBoolean("use_async_when_possible", true); 483 m_useAsyncWhenPossible = startupConfig.GetBoolean("use_async_when_possible", false);
484 484
485 //Animation states 485 //Animation states
486 m_useFlySlow = startupConfig.GetBoolean("enableflyslow", false); 486 m_useFlySlow = startupConfig.GetBoolean("enableflyslow", false);
@@ -4261,10 +4261,13 @@ namespace OpenSim.Region.Framework.Scenes
4261 4261
4262 public void ForEachClient(Action<IClientAPI> action, bool doAsynchronous) 4262 public void ForEachClient(Action<IClientAPI> action, bool doAsynchronous)
4263 { 4263 {
4264 if (doAsynchronous) 4264 // FIXME: Asynchronous iteration is disabled until we have a threading model that
4265 m_clientManager.ForEach(action); 4265 // can support calling this function from an async packet handler without
4266 else 4266 // potentially deadlocking
4267 m_clientManager.ForEachSync(action); 4267 //if (doAsynchronous)
4268 // m_clientManager.ForEach(action);
4269 //else
4270 // m_clientManager.ForEachSync(action);
4268 } 4271 }
4269 4272
4270 public bool TryGetClient(UUID avatarID, out IClientAPI client) 4273 public bool TryGetClient(UUID avatarID, out IClientAPI client)
diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example
index 2adc87f..4f1799e 100644
--- a/bin/OpenSim.ini.example
+++ b/bin/OpenSim.ini.example
@@ -49,7 +49,7 @@
49 ; in parallel. Running in parallel should increase performance 49 ; in parallel. Running in parallel should increase performance
50 ; on a multi-core system, but will make debugging more 50 ; on a multi-core system, but will make debugging more
51 ; difficult if something deadlocks or times out 51 ; difficult if something deadlocks or times out
52 use_async_when_possible = true 52 use_async_when_possible = false
53 53
54 ; Max threads to allocate on the FireAndForget thread pool 54 ; Max threads to allocate on the FireAndForget thread pool
55 ; when running with the SmartThreadPool option above 55 ; when running with the SmartThreadPool option above