Fixes Mantis #3979
Applied with changes. Changed ThreatLevel to High since all discovery
functions are a high threat. Overriding that is the responsibility
of the grid owner.
Date: Wed, 5 Aug 2009 12:45:56 +0200
Subject: [PATCH] A few minor tweaks to the MRM API's in order to make it possible for MRM's to run in a separate AppDomain without poluting the primary appdomain of OpenSim
Specifically:
Added an explicit method for getting the "globals" of the MRM, removing the need to have the MRM script code loaded into the primary domain, in order to set up proxies
Added a [Serializable] attribute to TouchEventArgs, again in order to remove the need to have MRM script code loaded into the primary domain.
---------
Applied with whitespace changes
* MRM Scripts should do appropriate cleanup within this event, to allow for clean shutdowns and script updates. This means unbinding from events you are listening to, and releasing any resources.
|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.
[1] Added a new OnAttach event to Scene/EventManager
[2] Hooked up existing attach event handler in XEngine.
[3] Modified SceneGraph and Scene.Inventory to trigger
attach events at the appropriate places. I was forced
to distribut the changes across two files because of
the way attach processing is distributed across the
two files.
[4] In the case of RezSingleAttachmentFromInventory it is
necessary to handle event scheduling in a special way.
There is no synchronous path available, so the fact
that this object is attached, and who it is attached to,
is cached when the ScriptInstance is created. When
the script is started, the attached handler is driven
after on_rez (but before changed, this should be reviewed).
Signed-off-by: dr scofield (aka dirk husemann) <drscofield@xyzzyxyzzy.net>