diff options
3 files changed, 13 insertions, 4 deletions
diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs index f68612c..35ae44c 100644 --- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs | |||
@@ -52,7 +52,12 @@ namespace OpenSim.Region.ScriptEngine.Interfaces | |||
52 | { | 52 | { |
53 | bool Cancel(); | 53 | bool Cancel(); |
54 | void Abort(); | 54 | void Abort(); |
55 | bool Wait(TimeSpan t); | 55 | |
56 | /// <summary> | ||
57 | /// Wait for the work item to complete. | ||
58 | /// </summary> | ||
59 | /// <param name='t'>The number of milliseconds to wait. Must be >= -1 (Timeout.Infinite).</param> | ||
60 | bool Wait(int t); | ||
56 | } | 61 | } |
57 | 62 | ||
58 | /// <summary> | 63 | /// <summary> |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs index 669cc37..bf19a42 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs | |||
@@ -595,7 +595,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
595 | if (!m_coopTermination) | 595 | if (!m_coopTermination) |
596 | { | 596 | { |
597 | // If we're not co-operative terminating then try and wait for the event to complete before stopping | 597 | // If we're not co-operative terminating then try and wait for the event to complete before stopping |
598 | if (workItem.Wait(new TimeSpan((long)timeout * 100000))) | 598 | if (workItem.Wait(timeout)) |
599 | return true; | 599 | return true; |
600 | } | 600 | } |
601 | else | 601 | else |
@@ -610,7 +610,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
610 | 610 | ||
611 | // For now, we will wait forever since the event should always cleanly terminate once LSL loop | 611 | // For now, we will wait forever since the event should always cleanly terminate once LSL loop |
612 | // checking is implemented. May want to allow a shorter timeout option later. | 612 | // checking is implemented. May want to allow a shorter timeout option later. |
613 | if (workItem.Wait(TimeSpan.MaxValue)) | 613 | if (workItem.Wait(Timeout.Infinite)) |
614 | { | 614 | { |
615 | if (DebugLevel >= 1) | 615 | if (DebugLevel >= 1) |
616 | m_log.DebugFormat( | 616 | m_log.DebugFormat( |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XWorkItem.cs b/OpenSim/Region/ScriptEngine/XEngine/XWorkItem.cs index 2ac5c31..8dd7677 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/XWorkItem.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XWorkItem.cs | |||
@@ -57,8 +57,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
57 | wr.Abort(); | 57 | wr.Abort(); |
58 | } | 58 | } |
59 | 59 | ||
60 | public bool Wait(TimeSpan t) | 60 | public bool Wait(int t) |
61 | { | 61 | { |
62 | // We use the integer version of WaitAll because the current version of SmartThreadPool has a bug with the | ||
63 | // TimeSpan version. The number of milliseconds in TimeSpan is an int64 so when STP casts it down to an | ||
64 | // int (32-bit) we can end up with bad values. This occurs on Windows though curious not on Mono 2.10.8 | ||
65 | // (or very likely other versions of Mono at least up until 3.0.3). | ||
62 | return SmartThreadPool.WaitAll(new IWorkItemResult[] {wr}, t, false); | 66 | return SmartThreadPool.WaitAll(new IWorkItemResult[] {wr}, t, false); |
63 | } | 67 | } |
64 | } | 68 | } |