aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
diff options
context:
space:
mode:
authorMelanie2009-08-06 22:03:20 +0100
committerMelanie2009-08-06 22:03:20 +0100
commit91f6898b26caa8f74533dbd90478cf4103251abe (patch)
tree0ee8d1b94c3f0667d32cbf56043fd021fc8d8b73 /OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
parentMerge branch 'master' of ssh://melanie@opensimulator.org/var/git/opensim (diff)
downloadopensim-SC-91f6898b26caa8f74533dbd90478cf4103251abe.zip
opensim-SC-91f6898b26caa8f74533dbd90478cf4103251abe.tar.gz
opensim-SC-91f6898b26caa8f74533dbd90478cf4103251abe.tar.bz2
opensim-SC-91f6898b26caa8f74533dbd90478cf4103251abe.tar.xz
|From: James J Greensky <jame.j.greensky@intel.com>
|Date: Wed, 5 Aug 2009 09:51:52 -0700 |Subject: [PATCH] Closed two major memory leaks for scripted objects | |Two major memory leaks for the scripted objects were fixed |- One leak had to do with remoting acrossing app domains. When a script and | its controlling agent communicate across an application boundary, it calls | functions on a stub proxy object that then invokes the remote method on | the object in the other app domain. These stub objects (two for each script) | were setup to have infinate lifetimes and were never being garbage collected. |- The second leak was the result of adding a scene object part instance method | to a scene event and never removing it. This cause the event's delegate list | to maintain a link to that object which is then never freed as the scene event | object is never destroyed. Patch applied, please direct feedback to me. Possible issue: Longtime idle scripts like vendors may fail.
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/ScriptEngine/XEngine/XEngine.cs14
1 files changed, 7 insertions, 7 deletions
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index c7673c7..ff75e2f 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -272,6 +272,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine
272 instance.ClearQueue(); 272 instance.ClearQueue();
273 instance.Stop(0); 273 instance.Stop(0);
274 274
275 // Release events, timer, etc
276 //
277 instance.DestroyScriptInstance();
278
275 // Unload scripts and app domains 279 // Unload scripts and app domains
276 // Must be done explicitly because they have infinite 280 // Must be done explicitly because they have infinite
277 // lifetime 281 // lifetime
@@ -282,10 +286,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
282 m_DomainScripts.Remove(instance.AppDomain); 286 m_DomainScripts.Remove(instance.AppDomain);
283 UnloadAppDomain(instance.AppDomain); 287 UnloadAppDomain(instance.AppDomain);
284 } 288 }
285
286 // Release events, timer, etc
287 //
288 instance.DestroyScriptInstance();
289 } 289 }
290 m_Scripts.Clear(); 290 m_Scripts.Clear();
291 m_PrimObjects.Clear(); 291 m_PrimObjects.Clear();
@@ -802,6 +802,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine
802 } 802 }
803 } 803 }
804 804
805 instance.RemoveState();
806 instance.DestroyScriptInstance();
807
805 m_DomainScripts[instance.AppDomain].Remove(instance.ItemID); 808 m_DomainScripts[instance.AppDomain].Remove(instance.ItemID);
806 if (m_DomainScripts[instance.AppDomain].Count == 0) 809 if (m_DomainScripts[instance.AppDomain].Count == 0)
807 { 810 {
@@ -809,9 +812,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
809 UnloadAppDomain(instance.AppDomain); 812 UnloadAppDomain(instance.AppDomain);
810 } 813 }
811 814
812 instance.RemoveState();
813 instance.DestroyScriptInstance();
814
815 instance = null; 815 instance = null;
816 816
817 ObjectRemoved handlerObjectRemoved = OnObjectRemoved; 817 ObjectRemoved handlerObjectRemoved = OnObjectRemoved;