diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs index ab46491683..17c06e74a8 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs @@ -650,11 +650,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance { EventParams data = null; + if (Suspended) + return 0; + lock (m_EventQueue) { - if (Suspended) - return 0; - lock (m_Script) { data = (EventParams) m_EventQueue.Dequeue(); @@ -685,7 +685,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance lock(m_Script) { - //m_log.DebugFormat("[XEngine]: Processing event {0} for {1}", data.EventName, this); +// m_log.DebugFormat("[XEngine]: Processing event {0} for {1}", data.EventName, this); m_DetectParams = data.DetectParams; diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs index 6c3d76768b..696c216a90 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs @@ -342,6 +342,16 @@ namespace OpenSim.Region.ScriptEngine.XEngine MainConsole.Instance.Commands.AddCommand( "scripts", false, "show scripts", "show scripts", "Show script information", "Synonym for scripts show command", HandleShowScripts); + + MainConsole.Instance.Commands.AddCommand( + "scripts", false, "scripts suspend", "scripts suspend", "Suspend all scripts", + "Suspends all currently running scripts. This only suspends event delivery, it will not suspend a" + + " script that is currently processing an event.", + HandleSuspendScripts); + + MainConsole.Instance.Commands.AddCommand( + "scripts", false, "scripts resume", "scripts resume", "Resume all scripts", + "Resumes all currently suspended scripts", HandleResumeScripts); } public void HandleShowScripts(string module, string[] cmdparams) @@ -381,6 +391,44 @@ namespace OpenSim.Region.ScriptEngine.XEngine } } + public void HandleSuspendScripts(string module, string[] cmdparams) + { + lock (m_Scripts) + { + foreach (IScriptInstance instance in m_Scripts.Values) + { + if (!instance.Suspended) + { + instance.Suspend(); + + SceneObjectPart sop = m_Scene.GetSceneObjectPart(instance.ObjectID); + MainConsole.Instance.OutputFormat( + "Suspended {0}.{1}, item UUID {2}, prim UUID {3} @ {4}", + instance.PrimName, instance.ScriptName, instance.ItemID, instance.ObjectID, sop.AbsolutePosition); + } + } + } + } + + public void HandleResumeScripts(string module, string[] cmdparams) + { + lock (m_Scripts) + { + foreach (IScriptInstance instance in m_Scripts.Values) + { + if (instance.Suspended) + { + instance.Resume(); + + SceneObjectPart sop = m_Scene.GetSceneObjectPart(instance.ObjectID); + MainConsole.Instance.OutputFormat( + "Resumed {0}.{1}, item UUID {2}, prim UUID {3} @ {4}", + instance.PrimName, instance.ScriptName, instance.ItemID, instance.ObjectID, sop.AbsolutePosition); + } + } + } + } + public void RemoveRegion(Scene scene) { if (!m_Enabled)