diff --git a/OpenSim/Data/IXAssetDataPlugin.cs b/OpenSim/Data/IXAssetDataPlugin.cs
new file mode 100644
index 0000000000..74ad6f497d
--- /dev/null
+++ b/OpenSim/Data/IXAssetDataPlugin.cs
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSimulator Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System.Collections.Generic;
+using OpenMetaverse;
+using OpenSim.Framework;
+
+namespace OpenSim.Data
+{
+ ///
+ /// This interface exists to distinguish between the normal IAssetDataPlugin and the one used by XAssetService
+ /// for now.
+ ///
+ public interface IXAssetDataPlugin : IPlugin
+ {
+ AssetBase GetAsset(UUID uuid);
+ void StoreAsset(AssetBase asset);
+ bool ExistsAsset(UUID uuid);
+ List FetchAssetMetadataSet(int start, int count);
+ void Initialise(string connect);
+ bool Delete(string id);
+ }
+}
\ No newline at end of file
diff --git a/OpenSim/Data/MySQL/MySQLXAssetData.cs b/OpenSim/Data/MySQL/MySQLXAssetData.cs
index 7b634e2b09..9a503734be 100644
--- a/OpenSim/Data/MySQL/MySQLXAssetData.cs
+++ b/OpenSim/Data/MySQL/MySQLXAssetData.cs
@@ -41,7 +41,7 @@ using OpenSim.Data;
namespace OpenSim.Data.MySQL
{
- public class MySQLXAssetData : AssetDataBase
+ public class MySQLXAssetData : IXAssetDataPlugin
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
@@ -61,7 +61,7 @@ namespace OpenSim.Data.MySQL
#region IPlugin Members
- public override string Version { get { return "1.0.0.0"; } }
+ public string Version { get { return "1.0.0.0"; } }
///
/// Initialises Asset interface
@@ -74,7 +74,7 @@ namespace OpenSim.Data.MySQL
///
///
/// connect string
- public override void Initialise(string connect)
+ public void Initialise(string connect)
{
m_log.ErrorFormat("[MYSQL XASSETDATA]: ***********************************************************");
m_log.ErrorFormat("[MYSQL XASSETDATA]: ***********************************************************");
@@ -96,17 +96,17 @@ namespace OpenSim.Data.MySQL
}
}
- public override void Initialise()
+ public void Initialise()
{
throw new NotImplementedException();
}
- public override void Dispose() { }
+ public void Dispose() { }
///
/// The name of this DB provider
///
- override public string Name
+ public string Name
{
get { return "MySQL XAsset storage engine"; }
}
@@ -121,7 +121,7 @@ namespace OpenSim.Data.MySQL
/// Asset UUID to fetch
/// Return the asset
/// On failure : throw an exception and attempt to reconnect to database
- override public AssetBase GetAsset(UUID assetID)
+ public AssetBase GetAsset(UUID assetID)
{
// m_log.DebugFormat("[MYSQL XASSET DATA]: Looking for asset {0}", assetID);
@@ -190,7 +190,7 @@ namespace OpenSim.Data.MySQL
///
/// Asset UUID to create
/// On failure : Throw an exception and attempt to reconnect to database
- override public bool StoreAsset(AssetBase asset)
+ public void StoreAsset(AssetBase asset)
{
lock (m_dbLock)
{
@@ -265,7 +265,7 @@ namespace OpenSim.Data.MySQL
transaction.Rollback();
- return false;
+ return;
}
if (!ExistsData(dbcon, transaction, hash))
@@ -289,7 +289,7 @@ namespace OpenSim.Data.MySQL
transaction.Rollback();
- return false;
+ return;
}
}
@@ -297,7 +297,6 @@ namespace OpenSim.Data.MySQL
}
}
}
- return true;
}
// private void UpdateAccessTime(AssetBase asset)
@@ -381,7 +380,7 @@ namespace OpenSim.Data.MySQL
///
/// The asset UUID
/// true if it exists, false otherwise.
- override public bool ExistsAsset(UUID uuid)
+ public bool ExistsAsset(UUID uuid)
{
// m_log.DebugFormat("[ASSETS DB]: Checking for asset {0}", uuid);
@@ -427,7 +426,7 @@ namespace OpenSim.Data.MySQL
/// The number of results to discard from the total data set.
/// The number of rows the returned list should contain.
/// A list of AssetMetadata objects.
- public override List FetchAssetMetadataSet(int start, int count)
+ public List FetchAssetMetadataSet(int start, int count)
{
List retList = new List(count);
@@ -472,7 +471,7 @@ namespace OpenSim.Data.MySQL
return retList;
}
- public override bool Delete(string id)
+ public bool Delete(string id)
{
// m_log.DebugFormat("[XASSETS DB]: Deleting asset {0}", id);
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/LocalAuthorizationServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/LocalAuthorizationServiceConnector.cs
index c982db61fc..267fb9ead9 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/LocalAuthorizationServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/LocalAuthorizationServiceConnector.cs
@@ -93,8 +93,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization
scene.RegisterModuleInterface(this);
m_Scene = scene;
-
- scene.EventManager.OnLoginsEnabled += new EventManager.LoginsEnabled(OnLoginsEnabled);
}
public void RemoveRegion(Scene scene)
@@ -106,16 +104,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization
if (!m_Enabled)
return;
+ m_AuthorizationService = new AuthorizationService(m_AuthorizationConfig, m_Scene);
+
m_log.InfoFormat(
"[AUTHORIZATION CONNECTOR]: Enabled local authorization for region {0}",
scene.RegionInfo.RegionName);
}
- private void OnLoginsEnabled(string regionName)
- {
- m_AuthorizationService = new AuthorizationService(m_AuthorizationConfig, m_Scene);
- }
-
public bool IsAuthorizedForRegion(
string userID, string firstName, string lastName, string regionID, out string message)
{
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index 605ee3202f..853491b2e0 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -485,6 +485,13 @@ namespace OpenSim.Region.Framework.Scenes
public event RegionHeartbeatEnd OnRegionHeartbeatEnd;
public delegate void LoginsEnabled(string regionName);
+
+ ///
+ /// This should only fire in all circumstances if the RegionReady module is active.
+ ///
+ ///
+ /// TODO: Fire this even when the RegionReady module is not active.
+ ///
public event LoginsEnabled OnLoginsEnabled;
public delegate void PrimsLoaded(Scene s);
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 753effcda0..b50ccc43f5 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -1229,9 +1229,6 @@ namespace OpenSim.Region.Framework.Scenes
while (!shuttingdown)
Update();
}
- catch (ThreadAbortException)
- {
- }
finally
{
Monitor.Pulse(m_heartbeatLock);
@@ -1409,10 +1406,6 @@ namespace OpenSim.Region.Framework.Scenes
}
}
}
- catch (NotImplementedException)
- {
- throw;
- }
catch (Exception e)
{
m_log.ErrorFormat(
diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs
index c5a76b2683..bebc10ca25 100644
--- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs
+++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceTeleportTests.cs
@@ -63,17 +63,11 @@ namespace OpenSim.Region.Framework.Scenes.Tests
Thread testThread = new Thread(testClass.run);
- try
- {
- // Seems kind of redundant to start a thread and then join it, however.. We need to protect against
- // A thread abort exception in the simulator code.
- testThread.Start();
- testThread.Join();
- }
- catch (ThreadAbortException)
- {
-
- }
+ // Seems kind of redundant to start a thread and then join it, however.. We need to protect against
+ // A thread abort exception in the simulator code.
+ testThread.Start();
+ testThread.Join();
+
Assert.That(testClass.results.Result, Is.EqualTo(true), testClass.results.Message);
// Console.WriteLine("Beginning test {0}", MethodBase.GetCurrentMethod());
}
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index 254d5785fc..6f37347781 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -842,17 +842,23 @@ namespace OpenSim.Region.Physics.OdePlugin
mesh.getIndexListAsPtrToIntArray(out indices, out triStride, out indexCount); // Also fixed, needs release after usage
mesh.releaseSourceMeshData(); // free up the original mesh data to save memory
- if (m_MeshToTriMeshMap.ContainsKey(mesh))
- {
- _triMeshData = m_MeshToTriMeshMap[mesh];
- }
- else
- {
- _triMeshData = d.GeomTriMeshDataCreate();
- d.GeomTriMeshDataBuildSimple(_triMeshData, vertices, vertexStride, vertexCount, indices, indexCount, triStride);
- d.GeomTriMeshDataPreprocess(_triMeshData);
- m_MeshToTriMeshMap[mesh] = _triMeshData;
+ // We must lock here since m_MeshToTriMeshMap is static and multiple scene threads may call this method at
+ // the same time.
+ lock (m_MeshToTriMeshMap)
+ {
+ if (m_MeshToTriMeshMap.ContainsKey(mesh))
+ {
+ _triMeshData = m_MeshToTriMeshMap[mesh];
+ }
+ else
+ {
+ _triMeshData = d.GeomTriMeshDataCreate();
+
+ d.GeomTriMeshDataBuildSimple(_triMeshData, vertices, vertexStride, vertexCount, indices, indexCount, triStride);
+ d.GeomTriMeshDataPreprocess(_triMeshData);
+ m_MeshToTriMeshMap[mesh] = _triMeshData;
+ }
}
// _parent_scene.waitForSpaceUnlock(m_targetSpace);
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index eb10975658..1e0f01f73a 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -469,16 +469,16 @@ namespace OpenSim.Region.ScriptEngine.XEngine
// sb.AppendFormat("Assemblies loaded : {0}\n", m_Assemblies.Count);
SensorRepeat sr = AsyncCommandManager.GetSensorRepeatPlugin(this);
- sb.AppendFormat("Sensors : {0}\n", sr.SensorsCount);
+ sb.AppendFormat("Sensors : {0}\n", sr != null ? sr.SensorsCount : 0);
Dataserver ds = AsyncCommandManager.GetDataserverPlugin(this);
- sb.AppendFormat("Dataserver requests : {0}\n", ds.DataserverRequestsCount);
+ sb.AppendFormat("Dataserver requests : {0}\n", ds != null ? ds.DataserverRequestsCount : 0);
Timer t = AsyncCommandManager.GetTimerPlugin(this);
- sb.AppendFormat("Timers : {0}\n", t.TimersCount);
+ sb.AppendFormat("Timers : {0}\n", t != null ? t.TimersCount : 0);
Listener l = AsyncCommandManager.GetListenerPlugin(this);
- sb.AppendFormat("Listeners : {0}\n", l.ListenerCount);
+ sb.AppendFormat("Listeners : {0}\n", l != null ? l.ListenerCount : 0);
return sb.ToString();
}
diff --git a/OpenSim/Services/AssetService/XAssetService.cs b/OpenSim/Services/AssetService/XAssetService.cs
index d161c58005..05eb125ebc 100644
--- a/OpenSim/Services/AssetService/XAssetService.cs
+++ b/OpenSim/Services/AssetService/XAssetService.cs
@@ -42,7 +42,7 @@ namespace OpenSim.Services.AssetService
/// This will be developed into a de-duplicating asset service.
/// XXX: Currently it's a just a copy of the existing AssetService. so please don't attempt to use it.
///
- public class XAssetService : AssetServiceBase, IAssetService
+ public class XAssetService : XAssetServiceBase, IAssetService
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
diff --git a/OpenSim/Services/AssetService/XAssetServiceBase.cs b/OpenSim/Services/AssetService/XAssetServiceBase.cs
new file mode 100644
index 0000000000..0c5c2c3d15
--- /dev/null
+++ b/OpenSim/Services/AssetService/XAssetServiceBase.cs
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSimulator Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Reflection;
+using Nini.Config;
+using OpenSim.Framework;
+using OpenSim.Data;
+using OpenSim.Services.Interfaces;
+using OpenSim.Services.Base;
+
+namespace OpenSim.Services.AssetService
+{
+ public class XAssetServiceBase : ServiceBase
+ {
+ protected IXAssetDataPlugin m_Database = null;
+ protected IAssetLoader m_AssetLoader = null;
+
+ public XAssetServiceBase(IConfigSource config) : base(config)
+ {
+ string dllName = String.Empty;
+ string connString = String.Empty;
+
+ //
+ // Try reading the [AssetService] section first, if it exists
+ //
+ IConfig assetConfig = config.Configs["AssetService"];
+ if (assetConfig != null)
+ {
+ dllName = assetConfig.GetString("StorageProvider", dllName);
+ connString = assetConfig.GetString("ConnectionString", connString);
+ }
+
+ //
+ // Try reading the [DatabaseService] section, if it exists
+ //
+ IConfig dbConfig = config.Configs["DatabaseService"];
+ if (dbConfig != null)
+ {
+ if (dllName == String.Empty)
+ dllName = dbConfig.GetString("StorageProvider", String.Empty);
+ if (connString == String.Empty)
+ connString = dbConfig.GetString("ConnectionString", String.Empty);
+ }
+
+ //
+ // We tried, but this doesn't exist. We can't proceed.
+ //
+ if (dllName.Equals(String.Empty))
+ throw new Exception("No StorageProvider configured");
+
+ m_Database = LoadPlugin(dllName);
+ if (m_Database == null)
+ throw new Exception("Could not find a storage interface in the given module");
+
+ m_Database.Initialise(connString);
+
+ string loaderName = assetConfig.GetString("DefaultAssetLoader",
+ String.Empty);
+
+ if (loaderName != String.Empty)
+ {
+ m_AssetLoader = LoadPlugin(loaderName);
+
+ if (m_AssetLoader == null)
+ throw new Exception("Asset loader could not be loaded");
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/OpenSim/Services/UserAccountService/UserAccountService.cs b/OpenSim/Services/UserAccountService/UserAccountService.cs
index 9d0aeefb2b..95c2935357 100644
--- a/OpenSim/Services/UserAccountService/UserAccountService.cs
+++ b/OpenSim/Services/UserAccountService/UserAccountService.cs
@@ -540,7 +540,7 @@ namespace OpenSim.Services.UserAccountService
else
{
m_log.DebugFormat(
- "[USER ACCOUNT SERVICE]; Created user inventory for {0} {1}", firstName, lastName);
+ "[USER ACCOUNT SERVICE]: Created user inventory for {0} {1}", firstName, lastName);
}
if (m_CreateDefaultAvatarEntries)
diff --git a/bin/Robust.HG.ini.example b/bin/Robust.HG.ini.example
index d98c826c5e..db9f08b729 100644
--- a/bin/Robust.HG.ini.example
+++ b/bin/Robust.HG.ini.example
@@ -66,7 +66,6 @@ ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003
; * in turn, reads the asset loader and database connection information
; *
[AssetService]
- StorageProvider = "OpenSim.Data.MySQL.dll:MySQLAssetData"
LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService"
DefaultAssetLoader = "OpenSim.Framework.AssetLoader.Filesystem.dll"
AssetLoaderArgs = "./assets/AssetSets.xml"
diff --git a/bin/Robust.ini.example b/bin/Robust.ini.example
index 691bfdc1e9..326caeb86d 100644
--- a/bin/Robust.ini.example
+++ b/bin/Robust.ini.example
@@ -58,7 +58,6 @@ ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003
; * in turn, reads the asset loader and database connection information
; *
[AssetService]
- StorageProvider = "OpenSim.Data.MySQL.dll:MySQLAssetData"
LocalServiceModule = "OpenSim.Services.AssetService.dll:AssetService"
DefaultAssetLoader = "OpenSim.Framework.AssetLoader.Filesystem.dll"
AssetLoaderArgs = "./assets/AssetSets.xml"
diff --git a/bin/config-include/StandaloneCommon.ini.example b/bin/config-include/StandaloneCommon.ini.example
index 4c734a1ab4..3dfbed7fdc 100644
--- a/bin/config-include/StandaloneCommon.ini.example
+++ b/bin/config-include/StandaloneCommon.ini.example
@@ -44,7 +44,6 @@
;AuthorizationServices = "LocalAuthorizationServicesConnector"
[AssetService]
- StorageProvider = "OpenSim.Data.MySQL.dll:MySQLAssetData"
DefaultAssetLoader = "OpenSim.Framework.AssetLoader.Filesystem.dll"
AssetLoaderArgs = "assets/AssetSets.xml"
@@ -241,4 +240,4 @@
; DisallowForeigners -- HG visitors not allowed
; DisallowResidents -- only Admins and Managers allowed
; Example:
- ; Region_Test_1 = "DisallowForeigners"
\ No newline at end of file
+ ; Region_Test_1 = "DisallowForeigners"
diff --git a/bin/shutdown_commands.txt b/bin/shutdown_commands.txt
deleted file mode 100644
index 4397749d23..0000000000
--- a/bin/shutdown_commands.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-; You can place simulator console commands here to execute when the simulator is shut down
-; e.g. show stats
-; Lines starting with ; are comments
diff --git a/bin/shutdown_commands.txt.example b/bin/shutdown_commands.txt.example
new file mode 100644
index 0000000000..dc07dc93db
--- /dev/null
+++ b/bin/shutdown_commands.txt.example
@@ -0,0 +1,3 @@
+; Copy this file to shutdown_commands.txt to execute region console commands when the simulator is asked to shut down
+; e.g. show stats
+; Lines that start with ; are comments
diff --git a/bin/startup_commands.txt b/bin/startup_commands.txt
deleted file mode 100644
index 1abfa64c87..0000000000
--- a/bin/startup_commands.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-; You can place region console commands here to execute once the simulator has finished starting up
-; e.g. show stats
-; Lines start with ; are comments.
diff --git a/bin/startup_commands.txt.example b/bin/startup_commands.txt.example
new file mode 100644
index 0000000000..677109c5a2
--- /dev/null
+++ b/bin/startup_commands.txt.example
@@ -0,0 +1,3 @@
+; Copy this file to startup_commands.txt to run region console commands once the simulator has finished starting up
+; e.g. show stats
+; Lines that start with ; are comments.