diff options
Diffstat (limited to 'OpenSim/Region/Environment/Scenes/SceneManager.cs')
-rw-r--r-- | OpenSim/Region/Environment/Scenes/SceneManager.cs | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/OpenSim/Region/Environment/Scenes/SceneManager.cs b/OpenSim/Region/Environment/Scenes/SceneManager.cs index c596f6e..dc9ac37 100644 --- a/OpenSim/Region/Environment/Scenes/SceneManager.cs +++ b/OpenSim/Region/Environment/Scenes/SceneManager.cs | |||
@@ -32,6 +32,7 @@ using System.Reflection; | |||
32 | using libsecondlife; | 32 | using libsecondlife; |
33 | using log4net; | 33 | using log4net; |
34 | using OpenSim.Framework; | 34 | using OpenSim.Framework; |
35 | using OpenSim.Region.Environment.Interfaces; | ||
35 | 36 | ||
36 | namespace OpenSim.Region.Environment.Scenes | 37 | namespace OpenSim.Region.Environment.Scenes |
37 | { | 38 | { |
@@ -78,10 +79,27 @@ namespace OpenSim.Region.Environment.Scenes | |||
78 | 79 | ||
79 | public void Close() | 80 | public void Close() |
80 | { | 81 | { |
82 | // collect known shared modules in sharedModules | ||
83 | Dictionary<string, IRegionModule> sharedModules = new Dictionary<string, IRegionModule>(); | ||
81 | for (int i = 0; i < m_localScenes.Count; i++) | 84 | for (int i = 0; i < m_localScenes.Count; i++) |
82 | { | 85 | { |
86 | // extract known shared modules from scene | ||
87 | foreach(string k in m_localScenes[i].Modules.Keys) | ||
88 | { | ||
89 | if (m_localScenes[i].Modules[k].IsSharedModule && | ||
90 | !sharedModules.ContainsKey(k)) | ||
91 | sharedModules[k] = m_localScenes[i].Modules[k]; | ||
92 | } | ||
93 | // close scene/region | ||
83 | m_localScenes[i].Close(); | 94 | m_localScenes[i].Close(); |
84 | } | 95 | } |
96 | |||
97 | // all regions/scenes are now closed, we can now safely | ||
98 | // close all shared modules | ||
99 | foreach(IRegionModule mod in sharedModules.Values) | ||
100 | { | ||
101 | mod.Close(); | ||
102 | } | ||
85 | } | 103 | } |
86 | 104 | ||
87 | public void Close(Scene cscene) | 105 | public void Close(Scene cscene) |