From ba745a524d4f13552f8ed3827a7315b3000cbe53 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Wed, 2 Jul 2014 23:48:44 +0100
Subject: Actually call Close() for shared region modules when the simulator is
being shutdown.
Adds regression test for this case.
---
.../RegionModulesControllerPlugin.cs | 87 +++++++++++++---------
1 file changed, 53 insertions(+), 34 deletions(-)
(limited to 'OpenSim/ApplicationPlugins/RegionModulesController')
diff --git a/OpenSim/ApplicationPlugins/RegionModulesController/RegionModulesControllerPlugin.cs b/OpenSim/ApplicationPlugins/RegionModulesController/RegionModulesControllerPlugin.cs
index 510be37..e03483a 100644
--- a/OpenSim/ApplicationPlugins/RegionModulesController/RegionModulesControllerPlugin.cs
+++ b/OpenSim/ApplicationPlugins/RegionModulesController/RegionModulesControllerPlugin.cs
@@ -32,6 +32,7 @@ using log4net;
using Mono.Addins;
using Nini.Config;
using OpenSim;
+using OpenSim.Framework;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
@@ -45,6 +46,12 @@ namespace OpenSim.ApplicationPlugins.RegionModulesController
LogManager.GetLogger(
MethodBase.GetCurrentMethod().DeclaringType);
+ ///
+ /// Controls whether we load modules from Mono.Addins.
+ ///
+ /// For debug purposes. Defaults to true.
+ public bool LoadModulesFromAddins { get; set; }
+
// Config access
private OpenSimBase m_openSim;
@@ -61,6 +68,11 @@ namespace OpenSim.ApplicationPlugins.RegionModulesController
private List m_sharedInstances =
new List();
+ public RegionModulesControllerPlugin()
+ {
+ LoadModulesFromAddins = true;
+ }
+
#region IApplicationPlugin implementation
public void Initialise (OpenSimBase openSim)
@@ -69,6 +81,9 @@ namespace OpenSim.ApplicationPlugins.RegionModulesController
m_openSim.ApplicationRegistry.RegisterInterface(this);
m_log.DebugFormat("[REGIONMODULES]: Initializing...");
+ if (!LoadModulesFromAddins)
+ return;
+
// Who we are
string id = AddinManager.CurrentAddin.Id;
@@ -88,40 +103,8 @@ namespace OpenSim.ApplicationPlugins.RegionModulesController
Dictionary> loadedModules = new Dictionary>();
// Scan modules and load all that aren't disabled
- foreach (TypeExtensionNode node in
- AddinManager.GetExtensionNodes("/OpenSim/RegionModules"))
- {
- IList loadedModuleData;
-
- if (!loadedModules.ContainsKey(node.Addin))
- loadedModules.Add(node.Addin, new List { 0, 0, 0 });
-
- loadedModuleData = loadedModules[node.Addin];
-
- if (node.Type.GetInterface(typeof(ISharedRegionModule).ToString()) != null)
- {
- if (CheckModuleEnabled(node, modulesConfig))
- {
- m_log.DebugFormat("[REGIONMODULES]: Found shared region module {0}, class {1}", node.Id, node.Type);
- m_sharedModules.Add(node);
- loadedModuleData[0]++;
- }
- }
- else if (node.Type.GetInterface(typeof(INonSharedRegionModule).ToString()) != null)
- {
- if (CheckModuleEnabled(node, modulesConfig))
- {
- m_log.DebugFormat("[REGIONMODULES]: Found non-shared region module {0}, class {1}", node.Id, node.Type);
- m_nonSharedModules.Add(node);
- loadedModuleData[1]++;
- }
- }
- else
- {
- m_log.WarnFormat("[REGIONMODULES]: Found unknown type of module {0}, class {1}", node.Id, node.Type);
- loadedModuleData[2]++;
- }
- }
+ foreach (TypeExtensionNode node in AddinManager.GetExtensionNodes("/OpenSim/RegionModules"))
+ AddNode(node, modulesConfig, loadedModules);
foreach (KeyValuePair> loadedModuleData in loadedModules)
{
@@ -194,6 +177,41 @@ namespace OpenSim.ApplicationPlugins.RegionModulesController
#region IPlugin implementation
+ private void AddNode(
+ TypeExtensionNode node, IConfig modulesConfig, Dictionary> loadedModules)
+ {
+ IList loadedModuleData;
+
+ if (!loadedModules.ContainsKey(node.Addin))
+ loadedModules.Add(node.Addin, new List { 0, 0, 0 });
+
+ loadedModuleData = loadedModules[node.Addin];
+
+ if (node.Type.GetInterface(typeof(ISharedRegionModule).ToString()) != null)
+ {
+ if (CheckModuleEnabled(node, modulesConfig))
+ {
+ m_log.DebugFormat("[REGIONMODULES]: Found shared region module {0}, class {1}", node.Id, node.Type);
+ m_sharedModules.Add(node);
+ loadedModuleData[0]++;
+ }
+ }
+ else if (node.Type.GetInterface(typeof(INonSharedRegionModule).ToString()) != null)
+ {
+ if (CheckModuleEnabled(node, modulesConfig))
+ {
+ m_log.DebugFormat("[REGIONMODULES]: Found non-shared region module {0}, class {1}", node.Id, node.Type);
+ m_nonSharedModules.Add(node);
+ loadedModuleData[1]++;
+ }
+ }
+ else
+ {
+ m_log.WarnFormat("[REGIONMODULES]: Found unknown type of module {0}, class {1}", node.Id, node.Type);
+ loadedModuleData[2]++;
+ }
+ }
+
// We don't do that here
//
public void Initialise ()
@@ -215,6 +233,7 @@ namespace OpenSim.ApplicationPlugins.RegionModulesController
m_sharedInstances[0].Close();
m_sharedInstances.RemoveAt(0);
}
+
m_sharedModules.Clear();
m_nonSharedModules.Clear();
}
--
cgit v1.1