* Unregister Mono.Addins event handlers in PluginLoader.Dispose() and always handle PluginLoader with the using pattern. This freed up 121,634,796 bytes on my system
* Avoid allocating an Action<IClientAPI> object every round of the OutgoingPacketHandler * Removed unnecessary semi-colon endings from OpenSim.ini.example [InterestManagement] section0.6.8-post-fixes
parent
c749cf0061
commit
a41cd1d069
|
@ -119,8 +119,8 @@ namespace OpenSim.Data
|
||||||
|
|
||||||
PluginLoaderParamFactory<T>(connect, out pluginInitialiser, out extensionPointPath);
|
PluginLoaderParamFactory<T>(connect, out pluginInitialiser, out extensionPointPath);
|
||||||
|
|
||||||
PluginLoader<T> loader = new PluginLoader<T>(pluginInitialiser);
|
using (PluginLoader<T> loader = new PluginLoader<T>(pluginInitialiser))
|
||||||
|
{
|
||||||
// loader will try to load all providers (MySQL, MSSQL, etc)
|
// loader will try to load all providers (MySQL, MSSQL, etc)
|
||||||
// unless it is constrainted to the correct "Provider" entry in the addin.xml
|
// unless it is constrainted to the correct "Provider" entry in the addin.xml
|
||||||
loader.Add(extensionPointPath, new PluginProviderFilter(provider));
|
loader.Add(extensionPointPath, new PluginProviderFilter(provider));
|
||||||
|
@ -128,6 +128,7 @@ namespace OpenSim.Data
|
||||||
|
|
||||||
return loader.Plugins;
|
return loader.Plugins;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns a new <typeparamref name="T" /> data plugin instance if
|
/// Returns a new <typeparamref name="T" /> data plugin instance if
|
||||||
|
|
|
@ -194,10 +194,15 @@ namespace OpenSim.Framework
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Unregisters Mono.Addins event handlers, allowing temporary Mono.Addins
|
||||||
|
/// data to be garbage collected. Since the plugins created by this loader
|
||||||
|
/// are meant to outlive the loader itself, they must be disposed separately
|
||||||
|
/// </summary>
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
foreach (T plugin in Plugins)
|
AddinManager.AddinLoadError -= on_addinloaderror_;
|
||||||
plugin.Dispose();
|
AddinManager.AddinLoaded -= on_addinloaded_;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initialise_plugin_dir_(string dir)
|
private void initialise_plugin_dir_(string dir)
|
||||||
|
|
|
@ -115,12 +115,12 @@ namespace OpenSim.Grid.GridServer
|
||||||
|
|
||||||
protected virtual void LoadPlugins()
|
protected virtual void LoadPlugins()
|
||||||
{
|
{
|
||||||
PluginLoader<IGridPlugin> loader =
|
using (PluginLoader<IGridPlugin> loader = new PluginLoader<IGridPlugin>(new GridPluginInitialiser(this)))
|
||||||
new PluginLoader<IGridPlugin>(new GridPluginInitialiser(this));
|
{
|
||||||
|
|
||||||
loader.Load("/OpenSim/GridServer");
|
loader.Load("/OpenSim/GridServer");
|
||||||
m_plugins = loader.Plugins;
|
m_plugins = loader.Plugins;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override void ShutdownSpecific()
|
public override void ShutdownSpecific()
|
||||||
{
|
{
|
||||||
|
|
|
@ -162,12 +162,12 @@ namespace OpenSim
|
||||||
|
|
||||||
protected virtual void LoadPlugins()
|
protected virtual void LoadPlugins()
|
||||||
{
|
{
|
||||||
PluginLoader<IApplicationPlugin> loader =
|
using (PluginLoader<IApplicationPlugin> loader = new PluginLoader<IApplicationPlugin>(new ApplicationPluginInitialiser(this)))
|
||||||
new PluginLoader<IApplicationPlugin>(new ApplicationPluginInitialiser(this));
|
{
|
||||||
|
|
||||||
loader.Load("/OpenSim/Startup");
|
loader.Load("/OpenSim/Startup");
|
||||||
m_plugins = loader.Plugins;
|
m_plugins = loader.Plugins;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected override List<string> GetHelpTopics()
|
protected override List<string> GetHelpTopics()
|
||||||
{
|
{
|
||||||
|
|
|
@ -814,6 +814,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
// on to en-US to avoid number parsing issues
|
// on to en-US to avoid number parsing issues
|
||||||
Culture.SetCurrentCulture();
|
Culture.SetCurrentCulture();
|
||||||
|
|
||||||
|
// Typecast the function to an Action<IClientAPI> once here to avoid allocating a new
|
||||||
|
// Action generic every round
|
||||||
|
Action<IClientAPI> clientPacketHandler = ClientOutgoingPacketHandler;
|
||||||
|
|
||||||
while (base.IsRunning)
|
while (base.IsRunning)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -862,7 +866,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
// Handle outgoing packets, resends, acknowledgements, and pings for each
|
// Handle outgoing packets, resends, acknowledgements, and pings for each
|
||||||
// client. m_packetSent will be set to true if a packet is sent
|
// client. m_packetSent will be set to true if a packet is sent
|
||||||
m_scene.ClientManager.ForEachSync(ClientOutgoingPacketHandler);
|
m_scene.ClientManager.ForEachSync(clientPacketHandler);
|
||||||
|
|
||||||
// If nothing was sent, sleep for the minimum amount of time before a
|
// If nothing was sent, sleep for the minimum amount of time before a
|
||||||
// token bucket could get more tokens
|
// token bucket could get more tokens
|
||||||
|
|
|
@ -1223,10 +1223,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (!m_backingup)
|
if (!m_backingup)
|
||||||
{
|
{
|
||||||
m_backingup = true;
|
m_backingup = true;
|
||||||
|
Util.FireAndForget(BackupWaitCallback);
|
||||||
System.ComponentModel.BackgroundWorker backupWorker = new System.ComponentModel.BackgroundWorker();
|
|
||||||
backupWorker.DoWork += delegate(object sender, System.ComponentModel.DoWorkEventArgs e) { Backup(); };
|
|
||||||
backupWorker.RunWorkerAsync();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1238,6 +1235,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_eventManager.TriggerOnFrame();
|
m_eventManager.TriggerOnFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Wrapper for Backup() that can be called with Util.FireAndForget()
|
||||||
|
/// </summary>
|
||||||
|
private void BackupWaitCallback(object o)
|
||||||
|
{
|
||||||
|
Backup();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Backup the scene. This acts as the main method of the backup thread.
|
/// Backup the scene. This acts as the main method of the backup thread.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -1396,11 +1396,11 @@
|
||||||
[InterestManagement]
|
[InterestManagement]
|
||||||
; This section controls how state updates are prioritized for each client
|
; This section controls how state updates are prioritized for each client
|
||||||
; Valid values are Time, Distance, SimpleAngularDistance, and FrontBack
|
; Valid values are Time, Distance, SimpleAngularDistance, and FrontBack
|
||||||
UpdatePrioritizationScheme = FrontBack;
|
UpdatePrioritizationScheme = FrontBack
|
||||||
ReprioritizationEnabled = true;
|
ReprioritizationEnabled = true
|
||||||
ReprioritizationInterval = 2000.0;
|
ReprioritizationInterval = 2000.0
|
||||||
RootReprioritizationDistance = 10.0;
|
RootReprioritizationDistance = 10.0
|
||||||
ChildReprioritizationDistance = 20.0;
|
ChildReprioritizationDistance = 20.0
|
||||||
|
|
||||||
;;
|
;;
|
||||||
;; These are defaults that are overwritten below in [Architecture].
|
;; These are defaults that are overwritten below in [Architecture].
|
||||||
|
|
Loading…
Reference in New Issue