prevent self call to llSetScriptState(ownname,FALSE) from blocking entire engine

melanie
UbitUmarov 2016-11-13 19:25:32 +00:00
parent b6329fb784
commit 4ebb4e371f
4 changed files with 14 additions and 6 deletions

View File

@ -68,7 +68,7 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
void SetMinEventDelay(UUID itemID, double delay);
int GetStartParameter(UUID itemID);
void SetScriptState(UUID itemID, bool state);
void SetScriptState(UUID itemID, bool state, bool self);
bool GetScriptState(UUID itemID);
void SetState(UUID itemID, string newState);
void ApiResetScript(UUID itemID);

View File

@ -521,7 +521,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if ((item = GetScriptByName(name)) != UUID.Zero)
{
m_ScriptEngine.SetScriptState(item, run == 0 ? false : true);
m_ScriptEngine.SetScriptState(item, run == 0 ? false : true, item == m_item.ItemID);
}
else
{

View File

@ -1854,17 +1854,25 @@ namespace OpenSim.Region.ScriptEngine.XEngine
return instance;
}
public void SetScriptState(UUID itemID, bool running)
public void SetScriptState(UUID itemID, bool running, bool self)
{
IScriptInstance instance = GetInstance(itemID);
if (instance != null)
{
if (running)
instance.Start();
else
{
if(self)
{
instance.Running = false;
throw new EventAbortException();
}
else
instance.Stop(100);
}
}
}
public bool GetScriptState(UUID itemID)
{

View File

@ -221,7 +221,7 @@ namespace OpenSim.Tests.Common
throw new System.NotImplementedException ();
}
public void SetScriptState(UUID itemID, bool state)
public void SetScriptState(UUID itemID, bool state, bool self)
{
throw new System.NotImplementedException ();
}