aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/XEngine
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2013-01-16 00:12:40 +0000
committerJustin Clark-Casey (justincc)2013-01-16 00:12:40 +0000
commit1b5c41c14ad11325be249ea1cce3c65d4d6a89be (patch)
tree987e140c9402c48cc8daf59d2b8af165646cc93a /OpenSim/Region/ScriptEngine/XEngine
parentInstead of passing separate engine, part and item components to script APIs, ... (diff)
downloadopensim-SC-1b5c41c14ad11325be249ea1cce3c65d4d6a89be.zip
opensim-SC-1b5c41c14ad11325be249ea1cce3c65d4d6a89be.tar.gz
opensim-SC-1b5c41c14ad11325be249ea1cce3c65d4d6a89be.tar.bz2
opensim-SC-1b5c41c14ad11325be249ea1cce3c65d4d6a89be.tar.xz
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.
Diffstat (limited to 'OpenSim/Region/ScriptEngine/XEngine')
-rw-r--r--OpenSim/Region/ScriptEngine/XEngine/XEngine.cs5
1 files changed, 5 insertions, 0 deletions
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index 186ae04..a17a018 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -1716,9 +1716,14 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1716 IScriptInstance instance = GetInstance(itemID); 1716 IScriptInstance instance = GetInstance(itemID);
1717 1717
1718 if (instance != null) 1718 if (instance != null)
1719 {
1719 instance.Stop(m_WaitForEventCompletionOnScriptStop); 1720 instance.Stop(m_WaitForEventCompletionOnScriptStop);
1721 }
1720 else 1722 else
1723 {
1724// m_log.DebugFormat("[XENGINE]: Could not find script with ID {0} to stop in {1}", itemID, World.Name);
1721 m_runFlags.AddOrUpdate(itemID, false, 240); 1725 m_runFlags.AddOrUpdate(itemID, false, 240);
1726 }
1722 } 1727 }
1723 1728
1724 public DetectParams GetDetectParams(UUID itemID, int idx) 1729 public DetectParams GetDetectParams(UUID itemID, int idx)