opensim
/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs |
@@ -51,7 +51,7 @@ |
|
private static Thread cmdHandlerThread; |
private static int cmdHandlerThreadCycleSleepms; |
private static readonly AutoResetEvent cmdHandlerResetEvent = new AutoResetEvent(false); |
private static readonly System.Timers.Timer cmdEventTimer = new System.Timers.Timer(); |
|
/// <summary> |
/// Lock for reading/writing static components of AsyncCommandManager. |
@@ -179,13 +179,21 @@ |
|
private static void StartThread() |
{ |
if (cmdHandlerThread == null) |
if (!cmdEventTimer.Enabled.Equals(false)) return; |
// Start the timer event |
cmdEventTimer.Elapsed += (sender, args) => |
{ |
// Start the thread that will be doing the work |
cmdHandlerThread |
= Watchdog.StartThread( |
CmdHandlerThreadLoop, "AsyncLSLCmdHandlerThread", ThreadPriority.Normal, true, true); |
} |
try |
{ |
DoOneCmdHandlerPass(); |
} |
catch (Exception e) |
{ |
m_log.Error("[ASYNC COMMAND MANAGER]: Exception in command handler pass: ", e); |
} |
}; |
cmdEventTimer.Interval = cmdHandlerThreadCycleSleepms; |
cmdEventTimer.Enabled = true; |
} |
|
private void ReadConfig() |
@@ -192,7 +200,7 @@ |
{ |
// cmdHandlerThreadCycleSleepms = m_ScriptEngine.Config.GetInt("AsyncLLCommandLoopms", 100); |
// TODO: Make this sane again |
cmdHandlerThreadCycleSleepms = 100; |
cmdHandlerThreadCycleSleepms = 10; |
} |
|
~AsyncCommandManager() |
@@ -223,10 +231,10 @@ |
{ |
try |
{ |
//Thread.Sleep(cmdHandlerThreadCycleSleepms); |
Thread.Sleep(cmdHandlerThreadCycleSleepms); |
|
DoOneCmdHandlerPass(); |
cmdHandlerResetEvent.WaitOne(cmdHandlerThreadCycleSleepms, false); |
|
Watchdog.UpdateThread(); |
} |
catch (Exception e) |
@@ -261,7 +269,6 @@ |
m_Dataserver[s].ExpireRequests(); |
} |
} |
cmdHandlerResetEvent.Set(); |
} |
|
/// <summary> |
@@ -441,4 +448,4 @@ |
} |
} |
} |
} |
} |