diff options
Diffstat (limited to 'OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs')
-rw-r--r-- | OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs | 22 |
1 files changed, 5 insertions, 17 deletions
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs index a86beae..7aa65c1 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs | |||
@@ -105,7 +105,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
105 | /// </summary> | 105 | /// </summary> |
106 | protected Dictionary<LLUUID, SceneObjectPart> m_parts = new Dictionary<LLUUID, SceneObjectPart>(); | 106 | protected Dictionary<LLUUID, SceneObjectPart> m_parts = new Dictionary<LLUUID, SceneObjectPart>(); |
107 | 107 | ||
108 | private bool m_deleted = false; | ||
109 | protected ulong m_regionHandle; | 108 | protected ulong m_regionHandle; |
110 | protected SceneObjectPart m_rootPart; | 109 | protected SceneObjectPart m_rootPart; |
111 | // private Dictionary<LLUUID, scriptEvents> m_scriptEvents = new Dictionary<LLUUID, scriptEvents>(); | 110 | // private Dictionary<LLUUID, scriptEvents> m_scriptEvents = new Dictionary<LLUUID, scriptEvents>(); |
@@ -961,7 +960,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
961 | 960 | ||
962 | public void FakeDeleteGroup() | 961 | public void FakeDeleteGroup() |
963 | { | 962 | { |
964 | m_deleted = true; | 963 | // If there are any updates queued for this object when the 'fake' delete happens, then make sure |
964 | // that they don't happen, otherwise the deleted objects will reappear | ||
965 | m_isDeleted = true; | ||
965 | 966 | ||
966 | foreach (SceneObjectPart part in m_parts.Values) | 967 | foreach (SceneObjectPart part in m_parts.Values) |
967 | { | 968 | { |
@@ -1499,10 +1500,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
1499 | //if (part.UpdateFlag == 0) part.UpdateFlag = 1; | 1500 | //if (part.UpdateFlag == 0) part.UpdateFlag = 1; |
1500 | //} | 1501 | //} |
1501 | 1502 | ||
1502 | 1503 | checkAtTargets(); | |
1503 | |||
1504 | checkAtTargets(); | ||
1505 | |||
1506 | 1504 | ||
1507 | if ((Math.Abs(lastPhysGroupRot.W - GroupRotation.W) > 0.1) | 1505 | if ((Math.Abs(lastPhysGroupRot.W - GroupRotation.W) > 0.1) |
1508 | || (Math.Abs(lastPhysGroupRot.X - GroupRotation.X) > 0.1) | 1506 | || (Math.Abs(lastPhysGroupRot.X - GroupRotation.X) > 0.1) |
@@ -1548,16 +1546,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
1548 | /// </summary> | 1546 | /// </summary> |
1549 | public void ScheduleGroupForFullUpdate() | 1547 | public void ScheduleGroupForFullUpdate() |
1550 | { | 1548 | { |
1551 | // If we wre in the delete queue, this will be set | ||
1552 | // A full update now would make the prim reappear | ||
1553 | // after KillObject was sent via FakeDeleteGroup | ||
1554 | // causing flickering and delays in deletion. | ||
1555 | // This leads to users clicking delete multiple times | ||
1556 | // which can crash the session. So, avoid it. | ||
1557 | // | ||
1558 | if (m_deleted) | ||
1559 | return; | ||
1560 | |||
1561 | checkAtTargets(); | 1549 | checkAtTargets(); |
1562 | lock (m_parts) | 1550 | lock (m_parts) |
1563 | { | 1551 | { |
@@ -1572,7 +1560,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
1572 | /// Schedule a terse update for this scene object | 1560 | /// Schedule a terse update for this scene object |
1573 | /// </summary> | 1561 | /// </summary> |
1574 | public void ScheduleGroupForTerseUpdate() | 1562 | public void ScheduleGroupForTerseUpdate() |
1575 | { | 1563 | { |
1576 | lock (m_parts) | 1564 | lock (m_parts) |
1577 | { | 1565 | { |
1578 | foreach (SceneObjectPart part in m_parts.Values) | 1566 | foreach (SceneObjectPart part in m_parts.Values) |