mirror of
https://github.com/opensim/opensim.git
synced 2026-08-05 00:46:02 +08:00
Revert the XEngine memleak patch, it causes premature GC.
This matches behavior seen with an earlier attempt to do this, apparently the sponsor mechanism does't work in Mono
This commit is contained in:
@@ -119,15 +119,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
AsyncCommands = new AsyncCommandManager(ScriptEngine);
|
||||
}
|
||||
|
||||
// Object never expires
|
||||
public override Object InitializeLifetimeService()
|
||||
{
|
||||
ILease lease = (ILease)base.InitializeLifetimeService();
|
||||
|
||||
if (lease.CurrentState == LeaseState.Initial)
|
||||
{
|
||||
lease.InitialLeaseTime = TimeSpan.FromMinutes(1.0);
|
||||
lease.RenewOnCallTime = TimeSpan.FromSeconds(10.0);
|
||||
lease.SponsorshipTimeout = TimeSpan.FromMinutes(1.0);
|
||||
lease.InitialLeaseTime = TimeSpan.Zero;
|
||||
}
|
||||
return lease;
|
||||
}
|
||||
|
||||
@@ -159,15 +159,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Never expire this object
|
||||
//
|
||||
public override Object InitializeLifetimeService()
|
||||
{
|
||||
ILease lease = (ILease)base.InitializeLifetimeService();
|
||||
|
||||
if (lease.CurrentState == LeaseState.Initial)
|
||||
{
|
||||
lease.InitialLeaseTime = TimeSpan.FromMinutes(1.0);
|
||||
lease.RenewOnCallTime = TimeSpan.FromSeconds(10.0);
|
||||
lease.SponsorshipTimeout = TimeSpan.FromMinutes(1.0);
|
||||
lease.InitialLeaseTime = TimeSpan.Zero;
|
||||
}
|
||||
return lease;
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ using log4net;
|
||||
|
||||
namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||
{
|
||||
public class Executor
|
||||
public class Executor : MarshalByRefObject
|
||||
{
|
||||
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
@@ -89,6 +89,26 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||
initEventFlags();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Make sure our object does not timeout when in AppDomain. (Called by ILease base class)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
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);
|
||||
|
||||
@@ -32,7 +32,7 @@ using LSLInteger = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
|
||||
|
||||
namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||
{
|
||||
public partial class ScriptBaseClass
|
||||
public partial class ScriptBaseClass : MarshalByRefObject
|
||||
{
|
||||
// LSL CONSTANTS
|
||||
public static readonly LSLInteger TRUE = new LSLInteger(1);
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Runtime.Remoting;
|
||||
using System.Runtime.Remoting.Lifetime;
|
||||
using System.Security.Permissions;
|
||||
using System.Threading;
|
||||
@@ -35,23 +34,26 @@ using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using OpenSim.Region.ScriptEngine.Interfaces;
|
||||
using OpenSim.Region.ScriptEngine.Shared;
|
||||
using OpenSim.Region.ScriptEngine.Shared.Api.Runtime;
|
||||
|
||||
namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||
{
|
||||
public partial class ScriptBaseClass : MarshalByRefObject, IScript
|
||||
{
|
||||
private Dictionary<string, MethodInfo> inits = new Dictionary<string, MethodInfo>();
|
||||
private ScriptSponsor m_sponser;
|
||||
|
||||
// Object expires if we don't keep it alive
|
||||
// sponsor will be added on object load
|
||||
[SecurityPermissionAttribute(SecurityAction.Demand,
|
||||
Flags = SecurityPermissionFlag.Infrastructure)]
|
||||
public override Object InitializeLifetimeService()
|
||||
{
|
||||
ILease lease = (ILease)base.InitializeLifetimeService();
|
||||
if (lease.CurrentState == LeaseState.Initial)
|
||||
{
|
||||
lease.InitialLeaseTime = TimeSpan.FromMinutes(1.0);
|
||||
lease.RenewOnCallTime = TimeSpan.FromSeconds(10.0);
|
||||
lease.SponsorshipTimeout = TimeSpan.FromMinutes(1.0);
|
||||
lease.InitialLeaseTime = TimeSpan.Zero;
|
||||
// lease.InitialLeaseTime = TimeSpan.FromMinutes(1);
|
||||
// lease.SponsorshipTimeout = TimeSpan.FromMinutes(2);
|
||||
// lease.RenewOnCallTime = TimeSpan.FromSeconds(2);
|
||||
}
|
||||
return lease;
|
||||
}
|
||||
@@ -64,6 +66,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
public ScriptBaseClass()
|
||||
{
|
||||
m_Executor = new Executor(this);
|
||||
@@ -78,8 +81,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||
inits[type] = mi;
|
||||
}
|
||||
}
|
||||
|
||||
m_sponser = new ScriptSponsor();
|
||||
}
|
||||
|
||||
private Executor m_Executor = null;
|
||||
@@ -111,9 +112,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||
if (!inits.ContainsKey(api))
|
||||
return;
|
||||
|
||||
ILease lease = (ILease)RemotingServices.GetLifetimeService(data as MarshalByRefObject);
|
||||
lease.Register(m_sponser);
|
||||
|
||||
MethodInfo mi = inits[api];
|
||||
|
||||
Object[] args = new Object[1];
|
||||
@@ -124,11 +122,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||
m_InitialValues = GetVars();
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
m_sponser.Close();
|
||||
}
|
||||
|
||||
public Dictionary<string, object> GetVars()
|
||||
{
|
||||
Dictionary<string, object> vars = new Dictionary<string, object>();
|
||||
|
||||
@@ -32,19 +32,15 @@ using System.Text;
|
||||
|
||||
namespace OpenSim.Region.ScriptEngine.Shared.Api.Runtime
|
||||
{
|
||||
[Serializable]
|
||||
public class ScriptSponsor : MarshalByRefObject, ISponsor
|
||||
{
|
||||
private bool m_closed = false;
|
||||
|
||||
// In theory: I execute, therefore I am.
|
||||
// If GC collects this class then sponsorship will expire
|
||||
public TimeSpan Renewal(ILease lease)
|
||||
{
|
||||
if (!m_closed)
|
||||
return lease.InitialLeaseTime;
|
||||
return TimeSpan.FromTicks(0);
|
||||
return TimeSpan.FromMinutes(2);
|
||||
}
|
||||
|
||||
public void Close() { m_closed = true; }
|
||||
|
||||
#if DEBUG
|
||||
// For tracing GC while debugging
|
||||
public static bool GCDummy = false;
|
||||
|
||||
Reference in New Issue
Block a user