From a179089d1c0afbb9cb53e47b4d1f236cb6e452f2 Mon Sep 17 00:00:00 2001
From: Justin Clarke Casey
Date: Mon, 18 Aug 2008 21:46:07 +0000
Subject: * If two regions have configuration information that conflicts (save
xy location, same uuid or same internal ip port) then complain loudly and
don't start up
---
.../LoadRegions/LoadRegionsPlugin.cs | 57 +++++++++++++++++++++-
OpenSim/Data/MySQL/MySQLUserData.cs | 1 +
2 files changed, 56 insertions(+), 2 deletions(-)
diff --git a/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs b/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs
index 523f9fc..44c12a2 100644
--- a/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs
+++ b/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs
@@ -25,6 +25,7 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+using System.Collections.Generic;
using System.Reflection;
using System.Threading;
using log4net;
@@ -74,6 +75,12 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
RegionInfo[] regionsToLoad = regionLoader.LoadRegions();
openSim.ModuleLoader.LoadDefaultSharedModules();
+
+ if (!CheckRegionsForSanity(regionsToLoad))
+ {
+ m_log.Error("[LOADREGIONS]: Halting startup due to conflicts in region configurations");
+ System.Environment.Exit(1);
+ }
for (int i = 0; i < regionsToLoad.Length; i++)
{
@@ -88,10 +95,56 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
public void Dispose()
{
- }
+ }
#endregion
-
+
+ ///
+ /// Check that region configuration information makes sense.
+ ///
+ ///
+ /// True if we're sane, false if we're insane
+ private bool CheckRegionsForSanity(RegionInfo[] regions)
+ {
+ if (regions.Length <= 0)
+ return true;
+
+ List checkedRegions = new List();
+ checkedRegions.Add(regions[0]);
+
+ for (int i = 1; i < regions.Length; i++)
+ {
+ RegionInfo region = regions[i];
+
+ foreach (RegionInfo checkedRegion in checkedRegions)
+ {
+ if (region.RegionID == checkedRegion.RegionID)
+ {
+ m_log.ErrorFormat(
+ "[LOADREGIONS]: Regions {0} and {1} have the same UUID {2}",
+ region.RegionName, checkedRegion.RegionName, region.RegionID);
+ return false;
+ }
+ else if (region.RegionLocX == checkedRegion.RegionLocX && region.RegionLocY == checkedRegion.RegionLocY)
+ {
+ m_log.ErrorFormat(
+ "[LOADREGIONS]: Regions {0} and {1} have the same location {2} {3}",
+ region.RegionName, checkedRegion.RegionName, region.RegionLocX, region.RegionLocY);
+ return false;
+ }
+ else if (region.InternalEndPoint.Port == checkedRegion.InternalEndPoint.Port)
+ {
+ m_log.ErrorFormat(
+ "[LOADREGIONS]: Regions {0} and {1} have the same internal IP port {2}",
+ region.RegionName, checkedRegion.RegionName, region.InternalEndPoint.Port);
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
public void LoadRegionFromConfig(OpenSimBase openSim, ulong regionhandle)
{
m_log.Info("[LOADREGIONS]: Load Regions addin being initialised");
diff --git a/OpenSim/Data/MySQL/MySQLUserData.cs b/OpenSim/Data/MySQL/MySQLUserData.cs
index 627bc0c..1ae5645 100644
--- a/OpenSim/Data/MySQL/MySQLUserData.cs
+++ b/OpenSim/Data/MySQL/MySQLUserData.cs
@@ -409,6 +409,7 @@ namespace OpenSim.Data.MySQL
Lfli.Add(fli);
}
+
reader.Dispose();
result.Dispose();
}
--
cgit v1.1