From 91f6898b26caa8f74533dbd90478cf4103251abe Mon Sep 17 00:00:00 2001 From: Melanie Date: Thu, 6 Aug 2009 22:03:20 +0100 Subject: |From: James J Greensky |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. --- .../ScriptEngine/Shared/Api/Runtime/Executor.cs | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) (limited to 'OpenSim/Region/ScriptEngine/Shared/Api/Runtime/Executor.cs') diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/Executor.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/Executor.cs index 2501752..7f67599 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/Executor.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/Executor.cs @@ -35,7 +35,7 @@ using log4net; namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase { - public class Executor : MarshalByRefObject + public class Executor { // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); @@ -89,26 +89,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase initEventFlags(); } - /// - /// Make sure our object does not timeout when in AppDomain. (Called by ILease base class) - /// - /// - public override Object InitializeLifetimeService() - { - //m_log.Debug("Executor: InitializeLifetimeService()"); - // return null; - ILease lease = (ILease)base.InitializeLifetimeService(); - - if (lease.CurrentState == LeaseState.Initial) - { - lease.InitialLeaseTime = TimeSpan.Zero; // TimeSpan.FromMinutes(1); - // lease.SponsorshipTimeout = TimeSpan.FromMinutes(2); - // lease.RenewOnCallTime = TimeSpan.FromSeconds(2); - } - return lease; - } - - public scriptEvents GetStateEventFlags(string state) { //m_log.Debug("Get event flags for " + state); -- cgit v1.1