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') 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