Merge branch 'master' of melanie@opensimulator.org:/var/git/opensim
commit
19484891bb
|
@ -302,6 +302,12 @@ namespace OpenSim.Framework.Console
|
||||||
if (!UUID.TryParse(post["ID"].ToString(), out id))
|
if (!UUID.TryParse(post["ID"].ToString(), out id))
|
||||||
return reply;
|
return reply;
|
||||||
|
|
||||||
|
lock(m_Connections)
|
||||||
|
{
|
||||||
|
if(!m_Connections.ContainsKey(id))
|
||||||
|
return reply;
|
||||||
|
}
|
||||||
|
|
||||||
if (post["COMMAND"] == null || post["COMMAND"].ToString() == String.Empty)
|
if (post["COMMAND"] == null || post["COMMAND"].ToString() == String.Empty)
|
||||||
return reply;
|
return reply;
|
||||||
|
|
||||||
|
|
|
@ -1465,6 +1465,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
public void SendKillObject(ulong regionHandle, uint localID)
|
public void SendKillObject(ulong regionHandle, uint localID)
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat("[CLIENT]: Sending KillObjectPacket to {0} for {1} in {2}", Name, localID, regionHandle);
|
||||||
|
|
||||||
KillObjectPacket kill = (KillObjectPacket)PacketPool.Instance.GetPacket(PacketType.KillObject);
|
KillObjectPacket kill = (KillObjectPacket)PacketPool.Instance.GetPacket(PacketType.KillObject);
|
||||||
// TODO: don't create new blocks if recycling an old packet
|
// TODO: don't create new blocks if recycling an old packet
|
||||||
kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1];
|
kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1];
|
||||||
|
@ -3472,6 +3474,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
public void SendPrimitiveToClient(SendPrimitiveData data)
|
public void SendPrimitiveToClient(SendPrimitiveData data)
|
||||||
{
|
{
|
||||||
|
// string text = data.text;
|
||||||
|
// if (text.IndexOf("\n") >= 0)
|
||||||
|
// text = text.Remove(text.IndexOf("\n"));
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[CLIENT]: Placing request to send full info about prim {0} text {1} to client {2}",
|
||||||
|
// data.localID, text, Name);
|
||||||
|
|
||||||
if (data.priority == double.NaN)
|
if (data.priority == double.NaN)
|
||||||
{
|
{
|
||||||
m_log.Error("[LLClientView] SendPrimitiveToClient received a NaN priority, dropping update");
|
m_log.Error("[LLClientView] SendPrimitiveToClient received a NaN priority, dropping update");
|
||||||
|
@ -3509,7 +3518,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
outPacket.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[count];
|
outPacket.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[count];
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
outPacket.ObjectData[i] = m_primFullUpdates.Dequeue();
|
outPacket.ObjectData[i] = m_primFullUpdates.Dequeue();
|
||||||
|
|
||||||
|
// string text = Util.FieldToString(outPacket.ObjectData[i].Text);
|
||||||
|
// if (text.IndexOf("\n") >= 0)
|
||||||
|
// text = text.Remove(text.IndexOf("\n"));
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[CLIENT]: Sending full info about prim {0} text {1} to client {2}",
|
||||||
|
// outPacket.ObjectData[i].ID, text, Name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
OutPacket(outPacket, ThrottleOutPacketType.State);
|
OutPacket(outPacket, ThrottleOutPacketType.State);
|
||||||
|
|
|
@ -77,7 +77,11 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Stop all the scripts in this entity.
|
/// Stop all the scripts in this entity.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
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>
|
||||||
|
void RemoveScriptInstances(bool sceneObjectBeingDeleted);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Start a script which is in this entity's inventory.
|
/// Start a script which is in this entity's inventory.
|
||||||
|
@ -103,7 +107,11 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
/// Stop a script which is in this prim's inventory.
|
/// Stop a script which is in this prim's inventory.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="itemId"></param>
|
/// <param name="itemId"></param>
|
||||||
void RemoveScriptInstance(UUID itemId);
|
/// <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>
|
||||||
|
void RemoveScriptInstance(UUID itemId, bool sceneObjectBeingDeleted);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Add an item to this entity's inventory. If an item with the same name already exists, then an alternative
|
/// Add an item to this entity's inventory. If an item with the same name already exists, then an alternative
|
||||||
|
|
|
@ -256,7 +256,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if (isScriptRunning)
|
if (isScriptRunning)
|
||||||
{
|
{
|
||||||
part.Inventory.RemoveScriptInstance(item.ItemID);
|
part.Inventory.RemoveScriptInstance(item.ItemID, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update item with new asset
|
// Update item with new asset
|
||||||
|
@ -855,8 +855,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if (item.Type == 10)
|
if (item.Type == 10)
|
||||||
{
|
{
|
||||||
|
part.RemoveScriptEvents(itemID);
|
||||||
EventManager.TriggerRemoveScript(localID, itemID);
|
EventManager.TriggerRemoveScript(localID, itemID);
|
||||||
}
|
}
|
||||||
|
|
||||||
group.RemoveInventoryItem(localID, itemID);
|
group.RemoveInventoryItem(localID, itemID);
|
||||||
part.GetProperties(remoteClient);
|
part.GetProperties(remoteClient);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1009,7 +1009,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
if (ent is SceneObjectGroup)
|
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>
|
/// <param name="silent">Suppress broadcasting changes to other clients.</param>
|
||||||
public void DeleteSceneObject(SceneObjectGroup group, bool silent)
|
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);
|
//SceneObjectPart rootPart = group.GetChildPart(group.UUID);
|
||||||
|
|
||||||
// Serialise calls to RemoveScriptInstances to avoid
|
// Serialise calls to RemoveScriptInstances to avoid
|
||||||
// deadlocking on m_parts inside SceneObjectGroup
|
// deadlocking on m_parts inside SceneObjectGroup
|
||||||
lock (m_deleting_scene_object)
|
lock (m_deleting_scene_object)
|
||||||
{
|
{
|
||||||
group.RemoveScriptInstances();
|
group.RemoveScriptInstances(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (SceneObjectPart part in group.Children.Values)
|
foreach (SceneObjectPart part in group.Children.Values)
|
||||||
|
@ -1918,6 +1920,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
group.DeleteGroup(silent);
|
group.DeleteGroup(silent);
|
||||||
|
|
||||||
|
// m_log.DebugFormat("[SCENE]: Exit DeleteSceneObject() for {0} {1}", group.Name, group.UUID);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -74,13 +74,17 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Stop the scripts contained in all the prims in this group
|
/// Stop the scripts contained in all the prims in this group
|
||||||
/// </summary>
|
/// </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)
|
lock (m_parts)
|
||||||
{
|
{
|
||||||
foreach (SceneObjectPart part in m_parts.Values)
|
foreach (SceneObjectPart part in m_parts.Values)
|
||||||
{
|
{
|
||||||
part.Inventory.RemoveScriptInstances();
|
part.Inventory.RemoveScriptInstances(sceneObjectBeingDeleted);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2533,6 +2533,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void ScheduleFullUpdate()
|
public void ScheduleFullUpdate()
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat("[SCENE OBJECT PART]: Scheduling full update for {0} {1}", Name, LocalId);
|
||||||
|
|
||||||
if (m_parentGroup != null)
|
if (m_parentGroup != null)
|
||||||
{
|
{
|
||||||
m_parentGroup.QueueForUpdateCheck();
|
m_parentGroup.QueueForUpdateCheck();
|
||||||
|
@ -4042,6 +4044,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
if (m_parentGroup == null)
|
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();
|
ScheduleFullUpdate();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -4058,9 +4062,15 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
LocalFlags=(PrimFlags)objectflagupdate;
|
LocalFlags=(PrimFlags)objectflagupdate;
|
||||||
|
|
||||||
if (m_parentGroup != null && m_parentGroup.RootPart == this)
|
if (m_parentGroup != null && m_parentGroup.RootPart == this)
|
||||||
|
{
|
||||||
m_parentGroup.aggregateScriptEvents();
|
m_parentGroup.aggregateScriptEvents();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
// m_log.DebugFormat(
|
||||||
|
// "[SCENE OBJECT PART]: Scheduling part {0} {1} for full update in aggregateScriptEvents()", Name, LocalId);
|
||||||
ScheduleFullUpdate();
|
ScheduleFullUpdate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int registerTargetWaypoint(Vector3 target, float tolerance)
|
public int registerTargetWaypoint(Vector3 target, float tolerance)
|
||||||
|
|
|
@ -230,7 +230,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Stop all the scripts in this prim.
|
/// Stop all the scripts in this prim.
|
||||||
/// </summary>
|
/// </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)
|
lock (Items)
|
||||||
{
|
{
|
||||||
|
@ -238,8 +242,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
if ((int)InventoryType.LSL == item.InvType)
|
if ((int)InventoryType.LSL == item.InvType)
|
||||||
{
|
{
|
||||||
RemoveScriptInstance(item.ItemID);
|
RemoveScriptInstance(item.ItemID, sceneObjectBeingDeleted);
|
||||||
m_part.RemoveScriptEvents(item.ItemID);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -388,10 +391,17 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// Stop a script which is in this prim's inventory.
|
/// Stop a script which is in this prim's inventory.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="itemId"></param>
|
/// <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 (m_items.ContainsKey(itemId))
|
||||||
{
|
{
|
||||||
|
if (!sceneObjectBeingDeleted)
|
||||||
|
m_part.RemoveScriptEvents(itemId);
|
||||||
|
|
||||||
m_part.ParentGroup.Scene.EventManager.TriggerRemoveScript(m_part.LocalId, itemId);
|
m_part.ParentGroup.Scene.EventManager.TriggerRemoveScript(m_part.LocalId, itemId);
|
||||||
m_part.ParentGroup.AddActiveScriptCount(-1);
|
m_part.ParentGroup.AddActiveScriptCount(-1);
|
||||||
}
|
}
|
||||||
|
@ -465,7 +475,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (i.Name == item.Name)
|
if (i.Name == item.Name)
|
||||||
{
|
{
|
||||||
if (i.InvType == (int)InventoryType.LSL)
|
if (i.InvType == (int)InventoryType.LSL)
|
||||||
RemoveScriptInstance(i.ItemID);
|
RemoveScriptInstance(i.ItemID, false);
|
||||||
|
|
||||||
RemoveInventoryItem(i.ItemID);
|
RemoveInventoryItem(i.ItemID);
|
||||||
break;
|
break;
|
||||||
|
@ -613,6 +623,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
int type = m_items[itemID].InvType;
|
int type = m_items[itemID].InvType;
|
||||||
if (type == 10) // Script
|
if (type == 10) // Script
|
||||||
{
|
{
|
||||||
|
m_part.RemoveScriptEvents(itemID);
|
||||||
m_part.ParentGroup.Scene.EventManager.TriggerRemoveScript(m_part.LocalId, itemID);
|
m_part.ParentGroup.Scene.EventManager.TriggerRemoveScript(m_part.LocalId, itemID);
|
||||||
}
|
}
|
||||||
m_items.Remove(itemID);
|
m_items.Remove(itemID);
|
||||||
|
|
|
@ -806,12 +806,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
instance.ClearQueue();
|
instance.ClearQueue();
|
||||||
instance.Stop(0);
|
instance.Stop(0);
|
||||||
|
|
||||||
SceneObjectPart part =
|
|
||||||
m_Scene.GetSceneObjectPart(localID);
|
|
||||||
|
|
||||||
if (part != null)
|
|
||||||
part.RemoveScriptEvents(itemID);
|
|
||||||
|
|
||||||
// bool objectRemoved = false;
|
// bool objectRemoved = false;
|
||||||
|
|
||||||
lock (m_PrimObjects)
|
lock (m_PrimObjects)
|
||||||
|
@ -846,7 +840,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
|
|
||||||
ObjectRemoved handlerObjectRemoved = OnObjectRemoved;
|
ObjectRemoved handlerObjectRemoved = OnObjectRemoved;
|
||||||
if (handlerObjectRemoved != null)
|
if (handlerObjectRemoved != null)
|
||||||
|
{
|
||||||
|
SceneObjectPart part = m_Scene.GetSceneObjectPart(localID);
|
||||||
handlerObjectRemoved(part.UUID);
|
handlerObjectRemoved(part.UUID);
|
||||||
|
}
|
||||||
|
|
||||||
CleanAssemblies();
|
CleanAssemblies();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue