Merge branch 'master' of melanie@opensimulator.org:/var/git/opensim

This commit is contained in:
Melanie
2010-01-26 14:44:07 +00:00
9 changed files with 79 additions and 19 deletions

View File

@@ -256,7 +256,7 @@ namespace OpenSim.Region.Framework.Scenes
if (isScriptRunning)
{
part.Inventory.RemoveScriptInstance(item.ItemID);
part.Inventory.RemoveScriptInstance(item.ItemID, false);
}
// Update item with new asset
@@ -855,8 +855,10 @@ namespace OpenSim.Region.Framework.Scenes
if (item.Type == 10)
{
part.RemoveScriptEvents(itemID);
EventManager.TriggerRemoveScript(localID, itemID);
}
group.RemoveInventoryItem(localID, itemID);
part.GetProperties(remoteClient);
}

View File

@@ -1009,7 +1009,7 @@ namespace OpenSim.Region.Framework.Scenes
{
if (ent is SceneObjectGroup)
{
((SceneObjectGroup) ent).RemoveScriptInstances();
((SceneObjectGroup) ent).RemoveScriptInstances(false);
}
}
}
@@ -1884,13 +1884,15 @@ namespace OpenSim.Region.Framework.Scenes
/// <param name="silent">Suppress broadcasting changes to other clients.</param>
public void DeleteSceneObject(SceneObjectGroup group, bool silent)
{
// m_log.DebugFormat("[SCENE]: Deleting scene object {0} {1}", group.Name, group.UUID);
//SceneObjectPart rootPart = group.GetChildPart(group.UUID);
// Serialise calls to RemoveScriptInstances to avoid
// deadlocking on m_parts inside SceneObjectGroup
lock (m_deleting_scene_object)
{
group.RemoveScriptInstances();
group.RemoveScriptInstances(true);
}
foreach (SceneObjectPart part in group.Children.Values)
@@ -1918,6 +1920,8 @@ namespace OpenSim.Region.Framework.Scenes
}
group.DeleteGroup(silent);
// m_log.DebugFormat("[SCENE]: Exit DeleteSceneObject() for {0} {1}", group.Name, group.UUID);
}
/// <summary>

View File

@@ -74,13 +74,17 @@ namespace OpenSim.Region.Framework.Scenes
/// <summary>
/// Stop the scripts contained in all the prims in this group
/// </summary>
public void RemoveScriptInstances()
/// <param name="sceneObjectBeingDeleted">
/// Should be true if these scripts are being removed because the scene
/// object is being deleted. This will prevent spurious updates to the client.
/// </param>
public void RemoveScriptInstances(bool sceneObjectBeingDeleted)
{
lock (m_parts)
{
foreach (SceneObjectPart part in m_parts.Values)
{
part.Inventory.RemoveScriptInstances();
part.Inventory.RemoveScriptInstances(sceneObjectBeingDeleted);
}
}
}

View File

@@ -2479,7 +2479,7 @@ namespace OpenSim.Region.Framework.Scenes
//m_log.Debug("prev: " + prevflag.ToString() + " curr: " + Flags.ToString());
//ScheduleFullUpdate();
}
public void RemoveScriptEvents(UUID scriptid)
{
lock (m_scriptEvents)
@@ -2533,6 +2533,8 @@ namespace OpenSim.Region.Framework.Scenes
/// </summary>
public void ScheduleFullUpdate()
{
// m_log.DebugFormat("[SCENE OBJECT PART]: Scheduling full update for {0} {1}", Name, LocalId);
if (m_parentGroup != null)
{
m_parentGroup.QueueForUpdateCheck();
@@ -4042,6 +4044,8 @@ namespace OpenSim.Region.Framework.Scenes
if (m_parentGroup == null)
{
// m_log.DebugFormat(
// "[SCENE OBJECT PART]: Scheduling part {0} {1} for full update in aggregateScriptEvents() since m_parentGroup == null", Name, LocalId);
ScheduleFullUpdate();
return;
}
@@ -4058,9 +4062,15 @@ namespace OpenSim.Region.Framework.Scenes
LocalFlags=(PrimFlags)objectflagupdate;
if (m_parentGroup != null && m_parentGroup.RootPart == this)
{
m_parentGroup.aggregateScriptEvents();
}
else
{
// m_log.DebugFormat(
// "[SCENE OBJECT PART]: Scheduling part {0} {1} for full update in aggregateScriptEvents()", Name, LocalId);
ScheduleFullUpdate();
}
}
public int registerTargetWaypoint(Vector3 target, float tolerance)

View File

@@ -230,7 +230,11 @@ namespace OpenSim.Region.Framework.Scenes
/// <summary>
/// Stop all the scripts in this prim.
/// </summary>
public void RemoveScriptInstances()
/// <param name="sceneObjectBeingDeleted">
/// Should be true if these scripts are being removed because the scene
/// object is being deleted. This will prevent spurious updates to the client.
/// </param>
public void RemoveScriptInstances(bool sceneObjectBeingDeleted)
{
lock (Items)
{
@@ -238,8 +242,7 @@ namespace OpenSim.Region.Framework.Scenes
{
if ((int)InventoryType.LSL == item.InvType)
{
RemoveScriptInstance(item.ItemID);
m_part.RemoveScriptEvents(item.ItemID);
RemoveScriptInstance(item.ItemID, sceneObjectBeingDeleted);
}
}
}
@@ -388,10 +391,17 @@ namespace OpenSim.Region.Framework.Scenes
/// Stop a script which is in this prim's inventory.
/// </summary>
/// <param name="itemId"></param>
public void RemoveScriptInstance(UUID itemId)
/// <param name="sceneObjectBeingDeleted">
/// Should be true if this script is being removed because the scene
/// object is being deleted. This will prevent spurious updates to the client.
/// </param>
public void RemoveScriptInstance(UUID itemId, bool sceneObjectBeingDeleted)
{
if (m_items.ContainsKey(itemId))
{
if (!sceneObjectBeingDeleted)
m_part.RemoveScriptEvents(itemId);
m_part.ParentGroup.Scene.EventManager.TriggerRemoveScript(m_part.LocalId, itemId);
m_part.ParentGroup.AddActiveScriptCount(-1);
}
@@ -465,7 +475,7 @@ namespace OpenSim.Region.Framework.Scenes
if (i.Name == item.Name)
{
if (i.InvType == (int)InventoryType.LSL)
RemoveScriptInstance(i.ItemID);
RemoveScriptInstance(i.ItemID, false);
RemoveInventoryItem(i.ItemID);
break;
@@ -613,6 +623,7 @@ namespace OpenSim.Region.Framework.Scenes
int type = m_items[itemID].InvType;
if (type == 10) // Script
{
m_part.RemoveScriptEvents(itemID);
m_part.ParentGroup.Scene.EventManager.TriggerRemoveScript(m_part.LocalId, itemID);
}
m_items.Remove(itemID);