|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.
This commit is contained in:
Melanie
2009-08-06 22:03:20 +01:00
parent eb9d584ee0
commit 91f6898b26
11 changed files with 73 additions and 68 deletions

View File

@@ -32,15 +32,19 @@ using System.Text;
namespace OpenSim.Region.ScriptEngine.Shared.Api.Runtime
{
[Serializable]
public class ScriptSponsor : MarshalByRefObject, ISponsor
{
// In theory: I execute, therefore I am.
// If GC collects this class then sponsorship will expire
private bool m_closed = false;
public TimeSpan Renewal(ILease lease)
{
return TimeSpan.FromMinutes(2);
if (!m_closed)
return lease.InitialLeaseTime;
return TimeSpan.FromTicks(0);
}
public void Close() { m_closed = true; }
#if DEBUG
// For tracing GC while debugging
public static bool GCDummy = false;