From 29b81912254d44463168f1dca581272feab8e9f7 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Tue, 22 Aug 2023 18:37:17 +0100 Subject: [PATCH] YEngine: reduce calls to CheckRunLockInvariants --- OpenSim/Region/ScriptEngine/YEngine/XMRInstCapture.cs | 11 +---------- OpenSim/Region/ScriptEngine/YEngine/XMRInstCtor.cs | 8 ++------ OpenSim/Region/ScriptEngine/YEngine/XMRInstRun.cs | 7 ------- .../Region/ScriptEngine/YEngine/XMRScriptUThread.cs | 6 ++++++ 4 files changed, 9 insertions(+), 23 deletions(-) diff --git a/OpenSim/Region/ScriptEngine/YEngine/XMRInstCapture.cs b/OpenSim/Region/ScriptEngine/YEngine/XMRInstCapture.cs index 5b144b3b27..d2c86ecac3 100644 --- a/OpenSim/Region/ScriptEngine/YEngine/XMRInstCapture.cs +++ b/OpenSim/Region/ScriptEngine/YEngine/XMRInstCapture.cs @@ -85,7 +85,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine lock(m_RunLock) { //m_RunOnePhase = "GetExecutionState enter"; - CheckRunLockInvariants(true); + //CheckRunLockInvariants(true); // Get copy of script globals and stack in relocateable form. Byte[] snapshotBytes; @@ -100,21 +100,18 @@ namespace OpenSim.Region.ScriptEngine.Yengine snapshotN.AppendChild(doc.CreateTextNode(snapshotString)); scriptStateN.AppendChild(snapshotN); //m_RunOnePhase = "GetExecutionState B"; - CheckRunLockInvariants(true); // "Running" says whether or not we are accepting new events. XmlElement runningN = doc.CreateElement("", "Running", ""); runningN.AppendChild(doc.CreateTextNode(m_Running.ToString())); scriptStateN.AppendChild(runningN); //m_RunOnePhase = "GetExecutionState C"; - CheckRunLockInvariants(true); // "DoGblInit" says whether or not default:state_entry() will init global vars. XmlElement doGblInitN = doc.CreateElement("", "DoGblInit", ""); doGblInitN.AppendChild(doc.CreateTextNode(doGblInit.ToString())); scriptStateN.AppendChild(doGblInitN); //m_RunOnePhase = "GetExecutionState D"; - CheckRunLockInvariants(true); if(m_XMRLSLApi is not null) { @@ -130,7 +127,6 @@ namespace OpenSim.Region.ScriptEngine.Yengine minEventDelayN.AppendChild(doc.CreateTextNode(m_minEventDelay.ToString())); scriptStateN.AppendChild(minEventDelayN); //m_RunOnePhase = "GetExecutionState D"; - CheckRunLockInvariants(true); } // More misc data. @@ -145,7 +141,6 @@ namespace OpenSim.Region.ScriptEngine.Yengine maskA.Value = m_Item.PermsMask.ToString(); permissionsN.Attributes.Append(maskA); //m_RunOnePhase = "GetExecutionState E"; - CheckRunLockInvariants(true); // "DetectParams" are returned by llDetected...() script functions // for the currently active event, if any. @@ -157,7 +152,6 @@ namespace OpenSim.Region.ScriptEngine.Yengine scriptStateN.AppendChild(detParArrayN); } //m_RunOnePhase = "GetExecutionState F"; - CheckRunLockInvariants(true); // Save any events we have in the queue. // @@ -181,7 +175,6 @@ namespace OpenSim.Region.ScriptEngine.Yengine } scriptStateN.AppendChild(queuedEventsN); //m_RunOnePhase = "GetExecutionState G"; - CheckRunLockInvariants(true); // "Plugins" indicate enabled timers and listens, etc. Object[] pluginData = AsyncCommandManager.GetSerializationData(m_Engine, m_ItemID); @@ -190,13 +183,11 @@ namespace OpenSim.Region.ScriptEngine.Yengine AppendXMLObjectArray(doc, plugins, pluginData, "plugin"); scriptStateN.AppendChild(plugins); //m_RunOnePhase = "GetExecutionState H"; - CheckRunLockInvariants(true); // Let script run again. suspendOnCheckRunHold = false; //m_RunOnePhase = "GetExecutionState leave"; - CheckRunLockInvariants(true); } // scriptStateN represents the contents of the .state file so diff --git a/OpenSim/Region/ScriptEngine/YEngine/XMRInstCtor.cs b/OpenSim/Region/ScriptEngine/YEngine/XMRInstCtor.cs index 4ff696d5ed..0b749a36ee 100644 --- a/OpenSim/Region/ScriptEngine/YEngine/XMRInstCtor.cs +++ b/OpenSim/Region/ScriptEngine/YEngine/XMRInstCtor.cs @@ -895,8 +895,6 @@ namespace OpenSim.Region.ScriptEngine.Yengine glblVars.iarObjects = XMRInstArrays.noObjects; glblVars.iarSDTClObjs = XMRInstArrays.noSDTClObjs; glblVars.iarSDTIntfObjs = XMRInstArrays.noSDTIntfObjs; - - CheckRunLockInvariants(true); } lock (m_QueueLock) @@ -957,9 +955,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine if (itemType == "OpenMetaverse.UUID") { - UUID val = new UUID(); - UUID.TryParse(tag.InnerText, out val); - + UUID.TryParse(tag.InnerText, out UUID val); return val; } @@ -1148,7 +1144,7 @@ namespace OpenSim.Region.ScriptEngine.Yengine this.MigrateIn(br); //m_RunOnePhase = "MigrateInEventHandler finished"; - CheckRunLockInvariants(true); + //CheckRunLockInvariants(true); } } } diff --git a/OpenSim/Region/ScriptEngine/YEngine/XMRInstRun.cs b/OpenSim/Region/ScriptEngine/YEngine/XMRInstRun.cs index f50e9a2b7a..553843a3e4 100644 --- a/OpenSim/Region/ScriptEngine/YEngine/XMRInstRun.cs +++ b/OpenSim/Region/ScriptEngine/YEngine/XMRInstRun.cs @@ -314,8 +314,6 @@ namespace OpenSim.Region.ScriptEngine.Yengine } //m_RunOnePhase = "resume old event handler"; - CheckRunLockInvariants(true); - m_LastRanAt = now; m_InstEHSlice++; callMode = CallMode_NORMAL; @@ -391,8 +389,6 @@ namespace OpenSim.Region.ScriptEngine.Yengine // finishes or it calls CheckRun(). //m_RunOnePhase = "start event handler"; - CheckRunLockInvariants(true); - m_DetectParams = evt.DetectParams; m_LastRanAt = now; m_InstEHEvent++; @@ -417,7 +413,6 @@ namespace OpenSim.Region.ScriptEngine.Yengine m_DetectParams = null; //m_RunOnePhase += "; checking exit invariants and unlocking"; - CheckRunLockInvariants(false); Monitor.Exit(m_RunLock); } @@ -796,8 +791,6 @@ namespace OpenSim.Region.ScriptEngine.Yengine // This thread transitioned the instance to RESETTING so reset it. lock(m_RunLock) { - CheckRunLockInvariants(true); - // No other thread should have transitioned it from RESETTING. if (m_IState != XMRInstState.SUSPENDED) { diff --git a/OpenSim/Region/ScriptEngine/YEngine/XMRScriptUThread.cs b/OpenSim/Region/ScriptEngine/YEngine/XMRScriptUThread.cs index 541d73936a..f635b67055 100644 --- a/OpenSim/Region/ScriptEngine/YEngine/XMRScriptUThread.cs +++ b/OpenSim/Region/ScriptEngine/YEngine/XMRScriptUThread.cs @@ -72,6 +72,12 @@ namespace OpenSim.Region.ScriptEngine.Yengine public Exception ResumeEx() { // Resume script from captured stack. + if (stackFrames is null) + { + m_log.Error($"ResumeEx: eventcode: None, stackFrame is null"); + throw new Exception("ResumeEx: stackFrame is null"); + } + callMode = XMRInstance.CallMode_RESTORE; suspendOnCheckRunTemp = true; try