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/SceneObjectPart.cs | |
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/SceneObjectPart.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 16 |
1 files changed, 8 insertions, 8 deletions
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 | ||