aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2013-01-17 23:39:09 +0000
committerJustin Clark-Casey (justincc)2013-01-17 23:39:09 +0000
commitc8afc8523b9caf931afb3d5b3f9874b26b866a77 (patch)
treeb1a84d82591f462ae61b3aeed4f4b6dd3c5c06e8 /OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
parentMerge branch 'master' of melanie@opensimulator.org:/var/git/opensim (diff)
downloadopensim-SC-c8afc8523b9caf931afb3d5b3f9874b26b866a77.zip
opensim-SC-c8afc8523b9caf931afb3d5b3f9874b26b866a77.tar.gz
opensim-SC-c8afc8523b9caf931afb3d5b3f9874b26b866a77.tar.bz2
opensim-SC-c8afc8523b9caf931afb3d5b3f9874b26b866a77.tar.xz
Implement non-wait co-operative termination of scripts for XEngine in addition to termination on wait.
This involves inserting opensim_reserved_CheckForCoopTermination() calls in lsl -> c# translation at any place where the script could be in a loop with no wait calls. These places are for, while, do-while, label, user function call and manual event function call. Call goes through to an XEngineScriptBase which extends ScriptBase. IEngine is extended to supply necessary engine-specific parent class references and constructor parameters to Compiler. Unfortunately, since XEngineScriptBase has to be passed WaitHandle in its constructor, older compiled scripts will fail to load with an error on the OpenSim console. Such scripts will need to be recompiled, either by removing all *.dll files from the bin/ScriptEngines/<region-id> or by setting DeleteScriptsOnStartup = true in [XEngine] for one run. Automatic recompilation may be implemented in a later commit. This feature should not yet be used, default remains termination with Thread.Abort() which will work as normal once scripts are recompiled.
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs')
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs24
1 files changed, 19 insertions, 5 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
index 75aea2b..e6ec0e1 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
@@ -267,13 +267,27 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
267 try 267 try
268 { 268 {
269 if (dom != System.AppDomain.CurrentDomain) 269 if (dom != System.AppDomain.CurrentDomain)
270 m_Script = (IScript)dom.CreateInstanceAndUnwrap( 270 m_Script
271 = (IScript)dom.CreateInstanceAndUnwrap(
271 Path.GetFileNameWithoutExtension(assembly), 272 Path.GetFileNameWithoutExtension(assembly),
272 "SecondLife.Script"); 273 "SecondLife.Script",
274 false,
275 BindingFlags.Default,
276 null,
277 new object[] { m_coopSleepHandle },
278 null,
279 null,
280 null);
273 else 281 else
274 m_Script = (IScript)Assembly.Load( 282 m_Script
275 Path.GetFileNameWithoutExtension(assembly)).CreateInstance( 283 = (IScript)Assembly.Load(Path.GetFileNameWithoutExtension(assembly)).CreateInstance(
276 "SecondLife.Script"); 284 "SecondLife.Script",
285 false,
286 BindingFlags.Default,
287 null,
288 new object[] { m_coopSleepHandle },
289 null,
290 null);
277 291
278 //ILease lease = (ILease)RemotingServices.GetLifetimeService(m_Script as ScriptBaseClass); 292 //ILease lease = (ILease)RemotingServices.GetLifetimeService(m_Script as ScriptBaseClass);
279 //RemotingServices.GetLifetimeService(m_Script as ScriptBaseClass); 293 //RemotingServices.GetLifetimeService(m_Script as ScriptBaseClass);