aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Framework/Interfaces/IRegionReadyModule.cs11
-rw-r--r--OpenSim/Region/Framework/Scenes/EventManager.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs37
3 files changed, 29 insertions, 21 deletions
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 @@
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28
29using System; 28using System;
29using OpenSim.Framework;
30 30
31namespace OpenSim.Region.Framework.Interfaces 31namespace OpenSim.Region.Framework.Interfaces
32{ 32{
33 public interface IRegionReadyModule 33 public interface IRegionReadyModule
34 { 34 {
35 void OarLoadingAlert(string msg); 35 void OarLoadingAlert(string msg);
36
37 /// <summary>
38 /// Trigger region ready status manually.
39 /// </summary>
40 /// <remarks>
41 /// This should be called by the scene if the IRegionReadyModule has set Scene.LoginLock == true
42 /// </remarks>
43 /// <param name='scene'></param>
44 void TriggerRegionReady(IScene scene);
36 } 45 }
37} 46}
38 47
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
2506 } 2506 }
2507 } 2507 }
2508 } 2508 }
2509 2509
2510 public void TriggerRegionReady(IScene scene) 2510 public void TriggerRegionReady(IScene scene)
2511 { 2511 {
2512 RegionReady handler = OnRegionReady; 2512 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
702 { 702 {
703 IConfig startupConfig = m_config.Configs["Startup"]; 703 IConfig startupConfig = m_config.Configs["Startup"];
704 704
705 StartDisabled = startupConfig.GetBoolean("StartDisabled", false);
706
705 m_defaultDrawDistance = startupConfig.GetFloat("DefaultDrawDistance", m_defaultDrawDistance); 707 m_defaultDrawDistance = startupConfig.GetFloat("DefaultDrawDistance", m_defaultDrawDistance);
706 m_useBackup = startupConfig.GetBoolean("UseSceneBackup", m_useBackup); 708 m_useBackup = startupConfig.GetBoolean("UseSceneBackup", m_useBackup);
707 if (!m_useBackup) 709 if (!m_useBackup)
@@ -1484,35 +1486,32 @@ namespace OpenSim.Region.Framework.Scenes
1484 // this is a rare case where we know we have just went through a long cycle of heap 1486 // this is a rare case where we know we have just went through a long cycle of heap
1485 // allocations, and there is no more work to be done until someone logs in 1487 // allocations, and there is no more work to be done until someone logs in
1486 GC.Collect(); 1488 GC.Collect();
1487 1489
1488 IConfig startupConfig = m_config.Configs["Startup"]; 1490 if (!LoginLock)
1489 if (startupConfig == null || !startupConfig.GetBoolean("StartDisabled", false))
1490 { 1491 {
1491 if (LoginLock) 1492 if (!StartDisabled)
1492 {
1493 // This handles a case of a region having no scripts for the RegionReady module
1494 if (m_sceneGraph.GetActiveScriptsCount() == 0)
1495 {
1496 // XXX: need to be able to tell these have changed in RegionReady, since it will not
1497 // detect a scenario where the region has no scripts - it's listening to the
1498 // script compile queue.
1499 EventManager.TriggerLoginsEnabled(this);
1500 }
1501 }
1502 else
1503 { 1493 {
1504 m_log.InfoFormat("[REGION]: Enabling logins for {0}", RegionInfo.RegionName); 1494 m_log.InfoFormat("[REGION]: Enabling logins for {0}", RegionInfo.RegionName);
1505 LoginsDisabled = false; 1495 LoginsDisabled = false;
1506 EventManager.TriggerLoginsEnabled(this); 1496 EventManager.TriggerLoginsEnabled(this);
1507 EventManager.TriggerRegionReady(this);
1508 } 1497 }
1509 1498
1510 m_sceneGridService.InformNeighborsThatRegionisUp(RequestModuleInterface<INeighbourService>(), RegionInfo); 1499 // Region ready should always be triggered whether logins are immediately enabled or not.
1500 EventManager.TriggerRegionReady(this);
1511 } 1501 }
1512 else 1502 else
1513 { 1503 {
1514 StartDisabled = true; 1504 // This handles a case of a region having no scripts for the RegionReady module
1515 LoginsDisabled = true; 1505 if (m_sceneGraph.GetActiveScriptsCount() == 0)
1506 {
1507 // In this case, we leave it to the IRegionReadyModule to enable logins
1508
1509 // LoginLock can currently only be set by a region module implementation.
1510 // If somehow this hasn't been done then the quickest way to bugfix is to see the
1511 // NullReferenceException
1512 IRegionReadyModule rrm = RequestModuleInterface<IRegionReadyModule>();
1513 rrm.TriggerRegionReady(this);
1514 }
1516 } 1515 }
1517 } 1516 }
1518 } 1517 }