From 528004d34988d8d2349f18ff7d78c6dd50ab8b2d Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Wed, 18 Jul 2012 23:35:05 +0100
Subject: Perform other region ready actions even if simulator is configured to
leave logins disabled on startup.
---
.../Framework/Interfaces/IRegionReadyModule.cs | 11 ++++++-
OpenSim/Region/Framework/Scenes/EventManager.cs | 2 +-
OpenSim/Region/Framework/Scenes/Scene.cs | 37 +++++++++++-----------
3 files changed, 29 insertions(+), 21 deletions(-)
(limited to 'OpenSim/Region/Framework')
diff --git a/OpenSim/Region/Framework/Interfaces/IRegionReadyModule.cs b/OpenSim/Region/Framework/Interfaces/IRegionReadyModule.cs
index aa4a757..136ca92 100644
--- a/OpenSim/Region/Framework/Interfaces/IRegionReadyModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IRegionReadyModule.cs
@@ -25,14 +25,23 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
using System;
+using OpenSim.Framework;
namespace OpenSim.Region.Framework.Interfaces
{
public interface IRegionReadyModule
{
void OarLoadingAlert(string msg);
+
+ ///
+ /// Trigger region ready status manually.
+ ///
+ ///
+ /// This should be called by the scene if the IRegionReadyModule has set Scene.LoginLock == true
+ ///
+ ///
+ void TriggerRegionReady(IScene scene);
}
}
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index 714d70d..b8ae0ac 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -2506,7 +2506,7 @@ namespace OpenSim.Region.Framework.Scenes
}
}
}
-
+
public void TriggerRegionReady(IScene scene)
{
RegionReady handler = OnRegionReady;
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index cadcec0..00aa0ea 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -702,6 +702,8 @@ namespace OpenSim.Region.Framework.Scenes
{
IConfig startupConfig = m_config.Configs["Startup"];
+ StartDisabled = startupConfig.GetBoolean("StartDisabled", false);
+
m_defaultDrawDistance = startupConfig.GetFloat("DefaultDrawDistance", m_defaultDrawDistance);
m_useBackup = startupConfig.GetBoolean("UseSceneBackup", m_useBackup);
if (!m_useBackup)
@@ -1484,35 +1486,32 @@ namespace OpenSim.Region.Framework.Scenes
// this is a rare case where we know we have just went through a long cycle of heap
// allocations, and there is no more work to be done until someone logs in
GC.Collect();
-
- IConfig startupConfig = m_config.Configs["Startup"];
- if (startupConfig == null || !startupConfig.GetBoolean("StartDisabled", false))
+
+ if (!LoginLock)
{
- if (LoginLock)
- {
- // This handles a case of a region having no scripts for the RegionReady module
- if (m_sceneGraph.GetActiveScriptsCount() == 0)
- {
- // XXX: need to be able to tell these have changed in RegionReady, since it will not
- // detect a scenario where the region has no scripts - it's listening to the
- // script compile queue.
- EventManager.TriggerLoginsEnabled(this);
- }
- }
- else
+ if (!StartDisabled)
{
m_log.InfoFormat("[REGION]: Enabling logins for {0}", RegionInfo.RegionName);
LoginsDisabled = false;
EventManager.TriggerLoginsEnabled(this);
- EventManager.TriggerRegionReady(this);
}
- m_sceneGridService.InformNeighborsThatRegionisUp(RequestModuleInterface(), RegionInfo);
+ // Region ready should always be triggered whether logins are immediately enabled or not.
+ EventManager.TriggerRegionReady(this);
}
else
{
- StartDisabled = true;
- LoginsDisabled = true;
+ // This handles a case of a region having no scripts for the RegionReady module
+ if (m_sceneGraph.GetActiveScriptsCount() == 0)
+ {
+ // In this case, we leave it to the IRegionReadyModule to enable logins
+
+ // LoginLock can currently only be set by a region module implementation.
+ // If somehow this hasn't been done then the quickest way to bugfix is to see the
+ // NullReferenceException
+ IRegionReadyModule rrm = RequestModuleInterface();
+ rrm.TriggerRegionReady(this);
+ }
}
}
}
--
cgit v1.1