From fccb03227e3f541a4c2f4e0e619074e4c1fb55dd Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 15 Jan 2013 21:13:22 +0000
Subject: Instead of passing separate engine, part and item components to
script APIs, pass down IScriptInstance instead.
This is to allow the future co-operative script thread terminate feature to detect and act upon termination requests.
This splits the assembly and state loading out from the ScriptInstance() constructor to a separate Load() method
in order to facilititate continued script logic regression testing.
---
OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs | 12 ++++++++++++
1 file changed, 12 insertions(+)
(limited to 'OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs')
diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
index 2f5b526..9de2d72 100644
--- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
@@ -31,6 +31,7 @@ using System.Collections.Generic;
using OpenMetaverse;
using log4net;
using OpenSim.Framework;
+using OpenSim.Region.Framework.Scenes;
using OpenSim.Region.ScriptEngine.Shared;
using OpenSim.Region.ScriptEngine.Interfaces;
@@ -105,6 +106,11 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
///
long MeasurementPeriodExecutionTime { get; }
+ ///
+ /// Scene part in which this script instance is contained.
+ ///
+ SceneObjectPart Part { get; }
+
IScriptEngine Engine { get; }
UUID AppDomain { get; set; }
string PrimName { get; }
@@ -124,6 +130,12 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
uint LocalID { get; }
UUID AssetID { get; }
+
+ ///
+ /// Inventory item containing the script used.
+ ///
+ TaskInventoryItem ScriptTask { get; }
+
Queue EventQueue { get; }
///
--
cgit v1.1
From 1b5c41c14ad11325be249ea1cce3c65d4d6a89be Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Wed, 16 Jan 2013 00:12:40 +0000
Subject: Implement co-operative script termination if termination comes during
a script wait event (llSleep(), etc.)
This makes use of EventWaitHandles since various web references indicate that Thread.Interrupt() can also cause runtime instability.
If co-op termination is enabled, then termination sets the wait handle instead of waiting for a timeout before possibly aborting the thread.
This allows the script to cleanly terminate if it's in a llSleep/LL function delay or the next time it enters such a wait without any timeout period.
Co-op termination is not yet testable since checking for termination request within loops that never trigger a wait is not yet implemented.
---
OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs | 13 +++++++++++++
1 file changed, 13 insertions(+)
(limited to 'OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs')
diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
index 9de2d72..38fff52 100644
--- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
@@ -28,6 +28,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
+using System.Threading;
using OpenMetaverse;
using log4net;
using OpenSim.Framework;
@@ -181,6 +182,18 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
void Resume();
///
+ /// If true then scripts should look to terminate their threads in co-operation with the script engine rather
+ /// than through Thread.Abort()
+ ///
+ bool CoopTermination { get; }
+
+ ///
+ /// Used for script sleeps when we are using co-operative script termination.
+ ///
+ /// null if CoopTermination is not active
+ EventWaitHandle CoopSleepHandle { get; }
+
+ ///
/// Process the next event queued for this script instance.
///
///
--
cgit v1.1
From b8949024bc55c62b9268b35d4f2a568760b9d7d3 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Wed, 16 Jan 2013 01:45:09 +0000
Subject: Revert "Implement co-operative script termination if termination
comes during a script wait event (llSleep(), etc.)"
Doing this as a favour to Melanie. This will be back with passing the wait handles directly to the api.
This reverts commit 1b5c41c14ad11325be249ea1cce3c65d4d6a89be.
---
OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs | 13 -------------
1 file changed, 13 deletions(-)
(limited to 'OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs')
diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
index 38fff52..9de2d72 100644
--- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
@@ -28,7 +28,6 @@
using System;
using System.Collections;
using System.Collections.Generic;
-using System.Threading;
using OpenMetaverse;
using log4net;
using OpenSim.Framework;
@@ -182,18 +181,6 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
void Resume();
///
- /// If true then scripts should look to terminate their threads in co-operation with the script engine rather
- /// than through Thread.Abort()
- ///
- bool CoopTermination { get; }
-
- ///
- /// Used for script sleeps when we are using co-operative script termination.
- ///
- /// null if CoopTermination is not active
- EventWaitHandle CoopSleepHandle { get; }
-
- ///
/// Process the next event queued for this script instance.
///
///
--
cgit v1.1
From 0963ece25bdef16852f5fd8ae4515a2f05d8b6e4 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Wed, 16 Jan 2013 02:07:43 +0000
Subject: Implement co-operative script termination if termination comes during
a script wait event (llSleep(), etc.)
This makes use of EventWaitHandles since various web references indicate that Thread.Interrupt() can also cause runtime instability.
If co-op termination is enabled, then termination sets the wait handle instead of waiting for a timeout before possibly aborting the thread.
This allows the script to cleanly terminate if it's in a llSleep/LL function delay or the next time it enters such a wait without any timeout period.
Co-op termination is not yet testable since checking for termination request within loops that never trigger a wait is not yet implemented.
This commit, unlike 1b5c41c, passes the wait handle as an extra parameter through IScript.Initialize() instead of passing IScriptInstance itself.
---
OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs | 1 +
1 file changed, 1 insertion(+)
(limited to 'OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs')
diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
index 9de2d72..f68612c 100644
--- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
@@ -28,6 +28,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
+using System.Threading;
using OpenMetaverse;
using log4net;
using OpenSim.Framework;
--
cgit v1.1