diff options
author | Melanie | 2009-08-06 22:03:20 +0100 |
---|---|---|
committer | Melanie | 2009-08-06 22:03:20 +0100 |
commit | 91f6898b26caa8f74533dbd90478cf4103251abe (patch) | |
tree | 0ee8d1b94c3f0667d32cbf56043fd021fc8d8b73 /OpenSim/Region/Framework/Scenes | |
parent | Merge branch 'master' of ssh://melanie@opensimulator.org/var/git/opensim (diff) | |
download | opensim-SC_OLD-91f6898b26caa8f74533dbd90478cf4103251abe.zip opensim-SC_OLD-91f6898b26caa8f74533dbd90478cf4103251abe.tar.gz opensim-SC_OLD-91f6898b26caa8f74533dbd90478cf4103251abe.tar.bz2 opensim-SC_OLD-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/Scenes')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/EventManager.cs | 11 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 16 |
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 | ||