From 5e4d6cab00cb29cd088ab7b62ab13aff103b64cb Mon Sep 17 00:00:00 2001 From: onefang Date: Sun, 19 May 2019 21:24:15 +1000 Subject: Dump OpenSim 0.9.0.1 into it's own branch. --- .../Api/Implementation/AsyncCommandManager.cs | 123 +++++++++++---------- 1 file changed, 64 insertions(+), 59 deletions(-) (limited to 'OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs') diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs index 036cb5d..e01d2e4 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/AsyncCommandManager.cs @@ -28,9 +28,7 @@ using System; using System.Collections; using System.Collections.Generic; -using System.Reflection; using System.Threading; -using log4net; using OpenMetaverse; using OpenSim.Framework; using OpenSim.Framework.Monitoring; @@ -39,6 +37,8 @@ using OpenSim.Region.ScriptEngine.Interfaces; using OpenSim.Region.ScriptEngine.Shared; using OpenSim.Region.ScriptEngine.Shared.Api.Plugins; using Timer=OpenSim.Region.ScriptEngine.Shared.Api.Plugins.Timer; +using System.Reflection; +using log4net; namespace OpenSim.Region.ScriptEngine.Shared.Api { @@ -51,7 +51,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api private static Thread cmdHandlerThread; private static int cmdHandlerThreadCycleSleepms; - + private static int numInstances; /// /// Lock for reading/writing static components of AsyncCommandManager. /// @@ -81,64 +81,64 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api public Dataserver DataserverPlugin { - get - { + get + { lock (staticLock) - return m_Dataserver[m_ScriptEngine]; + return m_Dataserver[m_ScriptEngine]; } } public Timer TimerPlugin { - get - { + get + { lock (staticLock) - return m_Timer[m_ScriptEngine]; + return m_Timer[m_ScriptEngine]; } } public HttpRequest HttpRequestPlugin { - get - { + get + { lock (staticLock) - return m_HttpRequest[m_ScriptEngine]; + return m_HttpRequest[m_ScriptEngine]; } } public Listener ListenerPlugin { - get - { + get + { lock (staticLock) - return m_Listener[m_ScriptEngine]; + return m_Listener[m_ScriptEngine]; } } public SensorRepeat SensorRepeatPlugin { - get - { + get + { lock (staticLock) - return m_SensorRepeat[m_ScriptEngine]; + return m_SensorRepeat[m_ScriptEngine]; } } public XmlRequest XmlRequestPlugin { - get - { + get + { lock (staticLock) - return m_XmlRequest[m_ScriptEngine]; + return m_XmlRequest[m_ScriptEngine]; } } public IScriptEngine[] ScriptEngines { - get - { + get + { lock (staticLock) - return m_ScriptEngines.ToArray(); + return m_ScriptEngines.ToArray(); } } @@ -172,18 +172,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if (!m_XmlRequest.ContainsKey(m_ScriptEngine)) m_XmlRequest[m_ScriptEngine] = new XmlRequest(this); - StartThread(); - } - } - - private static void StartThread() - { - if (cmdHandlerThread == null) - { - // Start the thread that will be doing the work - cmdHandlerThread - = WorkManager.StartThread( + numInstances++; + if (cmdHandlerThread == null) + { + cmdHandlerThread = WorkManager.StartThread( CmdHandlerThreadLoop, "AsyncLSLCmdHandlerThread", ThreadPriority.Normal, true, true); + } } } @@ -194,25 +188,34 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api cmdHandlerThreadCycleSleepms = 100; } +/* ~AsyncCommandManager() { // Shut down thread -// try -// { -// if (cmdHandlerThread != null) -// { -// if (cmdHandlerThread.IsAlive == true) -// { -// cmdHandlerThread.Abort(); -// //cmdHandlerThread.Join(); -// } -// } -// } -// catch -// { -// } - } + try + { + lock (staticLock) + { + numInstances--; + if(numInstances > 0) + return; + if (cmdHandlerThread != null) + { + if (cmdHandlerThread.IsAlive == true) + { + cmdHandlerThread.Abort(); + //cmdHandlerThread.Join(); + cmdHandlerThread = null; + } + } + } + } + catch + { + } + } +*/ /// /// Main loop for the manager thread /// @@ -223,11 +226,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api try { Thread.Sleep(cmdHandlerThreadCycleSleepms); - + Watchdog.UpdateThread(); DoOneCmdHandlerPass(); - Watchdog.UpdateThread(); } + catch ( System.Threading.ThreadAbortException) { } catch (Exception e) { m_log.Error("[ASYNC COMMAND MANAGER]: Exception in command handler pass: ", e); @@ -240,24 +243,25 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api lock (staticLock) { // Check HttpRequests - m_HttpRequest[m_ScriptEngines[0]].CheckHttpRequests(); + try { m_HttpRequest[m_ScriptEngines[0]].CheckHttpRequests(); } catch {} // Check XMLRPCRequests - m_XmlRequest[m_ScriptEngines[0]].CheckXMLRPCRequests(); + try { m_XmlRequest[m_ScriptEngines[0]].CheckXMLRPCRequests(); } catch {} foreach (IScriptEngine s in m_ScriptEngines) { // Check Listeners - m_Listener[s].CheckListeners(); + try { m_Listener[s].CheckListeners(); } catch {} + // Check timers - m_Timer[s].CheckTimerEvents(); + try { m_Timer[s].CheckTimerEvents(); } catch {} // Check Sensors - m_SensorRepeat[s].CheckSenseRepeaterEvents(); + try { m_SensorRepeat[s].CheckSenseRepeaterEvents(); } catch {} // Check dataserver - m_Dataserver[s].ExpireRequests(); + try { m_Dataserver[s].ExpireRequests(); } catch {} } } } @@ -269,6 +273,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api /// public static void RemoveScript(IScriptEngine engine, uint localID, UUID itemID) { + // Remove a specific script // m_log.DebugFormat("[ASYNC COMMAND MANAGER]: Removing facilities for script {0}", itemID); lock (staticLock) @@ -282,7 +287,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api // Remove from: HttpRequest IHttpRequestModule iHttpReq = engine.World.RequestModuleInterface(); if (iHttpReq != null) - iHttpReq.StopHttpRequestsForScript(itemID); + iHttpReq.StopHttpRequest(localID, itemID); IWorldComm comms = engine.World.RequestModuleInterface(); if (comms != null) -- cgit v1.1