Merge branch 'master' into careminster

This commit is contained in:
Melanie
2013-02-12 23:21:26 +00:00
7 changed files with 272 additions and 44 deletions

View File

@@ -52,7 +52,12 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
{
bool Cancel();
void Abort();
bool Wait(TimeSpan t);
/// <summary>
/// Wait for the work item to complete.
/// </summary>
/// <param name='t'>The number of milliseconds to wait. Must be >= -1 (Timeout.Infinite).</param>
bool Wait(int t);
}
/// <summary>

View File

@@ -603,7 +603,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
if (!m_coopTermination)
{
// If we're not co-operative terminating then try and wait for the event to complete before stopping
if (workItem.Wait(new TimeSpan((long)timeout * 100000)))
if (workItem.Wait(timeout))
return true;
}
else
@@ -618,7 +618,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
// For now, we will wait forever since the event should always cleanly terminate once LSL loop
// checking is implemented. May want to allow a shorter timeout option later.
if (workItem.Wait(TimeSpan.MaxValue))
if (workItem.Wait(Timeout.Infinite))
{
if (DebugLevel >= 1)
m_log.DebugFormat(

View File

@@ -57,8 +57,12 @@ namespace OpenSim.Region.ScriptEngine.XEngine
wr.Abort();
}
public bool Wait(TimeSpan t)
public bool Wait(int t)
{
// We use the integer version of WaitAll because the current version of SmartThreadPool has a bug with the
// TimeSpan version. The number of milliseconds in TimeSpan is an int64 so when STP casts it down to an
// int (32-bit) we can end up with bad values. This occurs on Windows though curious not on Mono 2.10.8
// (or very likely other versions of Mono at least up until 3.0.3).
return SmartThreadPool.WaitAll(new IWorkItemResult[] {wr}, t, false);
}
}