diff options
author | John Hurliman | 2009-10-27 02:36:57 -0700 |
---|---|---|
committer | John Hurliman | 2009-10-27 02:36:57 -0700 |
commit | 3a1ee79ee4239213b35f6b73a65c127c2af977fb (patch) | |
tree | 4743f5eb7c12b3723ed4b986d19714d1b3a0a3ea /OpenSim/Region | |
parent | * Tweak to region module loading to check for a matching constructor first in... (diff) | |
download | opensim-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
Diffstat (limited to 'OpenSim/Region')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.cs | 15 |
1 files changed, 9 insertions, 6 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) |