Merge branch 'master' into careminster

This commit is contained in:
Melanie
2012-12-18 09:45:40 +00:00
8 changed files with 61 additions and 41 deletions

View File

@@ -147,7 +147,13 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
/// <summary>
/// Stop the script instance.
/// </summary>
/// <remarks>
/// This must not be called by a thread that is in the process of handling an event for this script. Otherwise
/// there is a danger that it will self-abort and not complete the reset.
/// </remarks>
/// <param name="timeout"></param>
/// How many milliseconds we will wait for an existing script event to finish before
/// forcibly aborting that event.
/// <returns>true if the script was successfully stopped, false otherwise</returns>
bool Stop(int timeout);
@@ -169,8 +175,31 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
object EventProcessor();
int EventTime();
void ResetScript();
/// <summary>
/// Reset the script.
/// </summary>
/// <remarks>
/// This must not be called by a thread that is in the process of handling an event for this script. Otherwise
/// there is a danger that it will self-abort and not complete the reset. Such a thread must call
/// ApiResetScript() instead.
/// </remarks>
/// <param name='timeout'>
/// How many milliseconds we will wait for an existing script event to finish before
/// forcibly aborting that event prior to script reset.
/// </param>
void ResetScript(int timeout);
/// <summary>
/// Reset the script.
/// </summary>
/// <remarks>
/// This must not be called by any thread other than the one executing the scripts current event. This is
/// because there is no wait or abort logic if another thread is in the middle of processing a script event.
/// Such an external thread should use ResetScript() instead.
/// </remarks>
void ApiResetScript();
Dictionary<string, object> GetVars();
void SetVars(Dictionary<string, object> vars);
DetectParams GetDetectParams(int idx);

View File

@@ -880,7 +880,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
return (DateTime.Now - m_EventStart).Seconds;
}
public void ResetScript()
public void ResetScript(int timeout)
{
if (m_Script == null)
return;
@@ -890,7 +890,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
RemoveState();
ReleaseControls();
Stop(0);
Stop(timeout);
SceneObjectPart part = Engine.World.GetSceneObjectPart(LocalID);
part.Inventory.GetInventoryItem(ItemID).PermsMask = 0;
part.Inventory.GetInventoryItem(ItemID).PermsGranter = UUID.Zero;

View File

@@ -1783,7 +1783,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
{
IScriptInstance instance = GetInstance(itemID);
if (instance != null)
instance.ResetScript();
instance.ResetScript(m_WaitForEventCompletionOnScriptStop);
}
public void StartScript(UUID itemID)