aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework
diff options
context:
space:
mode:
authorMelanie2009-08-06 22:03:20 +0100
committerMelanie2009-08-06 22:03:20 +0100
commit91f6898b26caa8f74533dbd90478cf4103251abe (patch)
tree0ee8d1b94c3f0667d32cbf56043fd021fc8d8b73 /OpenSim/Region/Framework
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 'OpenSim/Region/Framework')
-rw-r--r--OpenSim/Region/Framework/Scenes/EventManager.cs11
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs16
2 files changed, 14 insertions, 13 deletions
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index 086496e..1d4d6d7 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -953,11 +953,12 @@ namespace OpenSim.Region.Framework.Scenes
953 // this lets us keep track of nasty script events like timer, etc. 953 // this lets us keep track of nasty script events like timer, etc.
954 public void TriggerTimerEvent(uint objLocalID, double Interval) 954 public void TriggerTimerEvent(uint objLocalID, double Interval)
955 { 955 {
956 handlerScriptTimerEvent = OnScriptTimerEvent; 956 throw new NotImplementedException("TriggerTimerEvent was thought to be not used anymore and the registration for the event from scene object part has been commented out due to a memory leak");
957 if (handlerScriptTimerEvent != null) 957 //handlerScriptTimerEvent = OnScriptTimerEvent;
958 { 958 //if (handlerScriptTimerEvent != null)
959 handlerScriptTimerEvent(objLocalID, Interval); 959 //{
960 } 960 // handlerScriptTimerEvent(objLocalID, Interval);
961 //}
961 } 962 }
962 963
963 /// <summary> 964 /// <summary>
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index bc11709..61dfa52 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -3673,14 +3673,14 @@ if (m_shape != null) {
3673 return; 3673 return;
3674 } 3674 }
3675 3675
3676 if ((GetEffectiveObjectFlags() & (uint)PrimFlags.Scripted) != 0) 3676 //if ((GetEffectiveObjectFlags() & (uint)PrimFlags.Scripted) != 0)
3677 { 3677 //{
3678 m_parentGroup.Scene.EventManager.OnScriptTimerEvent += handleTimerAccounting; 3678 // m_parentGroup.Scene.EventManager.OnScriptTimerEvent += handleTimerAccounting;
3679 } 3679 //}
3680 else 3680 //else
3681 { 3681 //{
3682 m_parentGroup.Scene.EventManager.OnScriptTimerEvent -= handleTimerAccounting; 3682 // m_parentGroup.Scene.EventManager.OnScriptTimerEvent -= handleTimerAccounting;
3683 } 3683 //}
3684 3684
3685 LocalFlags=(PrimFlags)objectflagupdate; 3685 LocalFlags=(PrimFlags)objectflagupdate;
3686 3686