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