diff options
author | Justin Clarke Casey | 2008-07-25 17:48:58 +0000 |
---|---|---|
committer | Justin Clarke Casey | 2008-07-25 17:48:58 +0000 |
commit | d954f46a0a8792d7d855c698ea45e8b67c0a421d (patch) | |
tree | 1f133bf5df52ef8b84eb4905e7d0de3859a4e4a6 | |
parent | oops. forgot to add addin.xml for GridInfoPlugin. also, slight (diff) | |
download | opensim-SC-d954f46a0a8792d7d855c698ea45e8b67c0a421d.zip opensim-SC-d954f46a0a8792d7d855c698ea45e8b67c0a421d.tar.gz opensim-SC-d954f46a0a8792d7d855c698ea45e8b67c0a421d.tar.bz2 opensim-SC-d954f46a0a8792d7d855c698ea45e8b67c0a421d.tar.xz |
* Stop the HasGroupChanged flag being reverted for newly restored prims which need to be persisted to the db
* This should stop the problem where linked prims loaded via an archive did not survive server restart
* It may address mantis 1819 though the symptoms don't look consistent
-rw-r--r-- | OpenSim/Region/Environment/Scenes/InnerScene.cs | 4 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs | 35 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Scenes/SceneObjectPart.cs | 14 |
3 files changed, 27 insertions, 26 deletions
diff --git a/OpenSim/Region/Environment/Scenes/InnerScene.cs b/OpenSim/Region/Environment/Scenes/InnerScene.cs index 2b2e087..e4b109c 100644 --- a/OpenSim/Region/Environment/Scenes/InnerScene.cs +++ b/OpenSim/Region/Environment/Scenes/InnerScene.cs | |||
@@ -261,8 +261,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
261 | Entities.Add(sceneObject.UUID, sceneObject); | 261 | Entities.Add(sceneObject.UUID, sceneObject); |
262 | m_numPrim += sceneObject.Children.Count; | 262 | m_numPrim += sceneObject.Children.Count; |
263 | 263 | ||
264 | if (attachToBackup) | 264 | if (attachToBackup) |
265 | sceneObject.AttachToBackup(); | 265 | sceneObject.AttachToBackup(); |
266 | 266 | ||
267 | return true; | 267 | return true; |
268 | } | 268 | } |
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs index 23490fc..abd24a2 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs | |||
@@ -512,8 +512,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
512 | { | 512 | { |
513 | if (InSceneBackup) | 513 | if (InSceneBackup) |
514 | { | 514 | { |
515 | // m_log.DebugFormat( | 515 | //m_log.DebugFormat( |
516 | // "[SCENE OBJECT GROUP]: Attaching object {0} to scene presistence sweep", UUID); | 516 | // "[SCENE OBJECT GROUP]: Attaching object {0} {1} to scene presistence sweep", Name, UUID); |
517 | 517 | ||
518 | m_scene.EventManager.OnBackup += ProcessBackup; | 518 | m_scene.EventManager.OnBackup += ProcessBackup; |
519 | } | 519 | } |
@@ -873,11 +873,15 @@ namespace OpenSim.Region.Environment.Scenes | |||
873 | return m_scene.MaxUndoCount; | 873 | return m_scene.MaxUndoCount; |
874 | return 5; | 874 | return 5; |
875 | } | 875 | } |
876 | public void ResetChildPrimPhysicsPositions() | 876 | |
877 | { | 877 | // justincc: I don't believe this hack is needed any longer, especially since the physics |
878 | AbsolutePosition = AbsolutePosition; | 878 | // parts of set AbsolutePosition were already commented out. By changing HasGroupChanged to false |
879 | HasGroupChanged = false; | 879 | // this method was preventing proper reload of scene objects. |
880 | } | 880 | //public void ResetChildPrimPhysicsPositions() |
881 | //{ | ||
882 | // AbsolutePosition = AbsolutePosition; | ||
883 | // HasGroupChanged = false; | ||
884 | //} | ||
881 | 885 | ||
882 | public LLUUID GetPartsFullID(uint localID) | 886 | public LLUUID GetPartsFullID(uint localID) |
883 | { | 887 | { |
@@ -1061,8 +1065,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
1061 | { | 1065 | { |
1062 | part.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_physicalPrim); | 1066 | part.ApplyPhysics(m_rootPart.GetEffectiveObjectFlags(), m_physicalPrim); |
1063 | } | 1067 | } |
1068 | |||
1064 | // Hack to get the physics scene geometries in the right spot | 1069 | // Hack to get the physics scene geometries in the right spot |
1065 | ResetChildPrimPhysicsPositions(); | 1070 | //ResetChildPrimPhysicsPositions(); |
1066 | } | 1071 | } |
1067 | } | 1072 | } |
1068 | else | 1073 | else |
@@ -1095,15 +1100,15 @@ namespace OpenSim.Region.Environment.Scenes | |||
1095 | /// </summary> | 1100 | /// </summary> |
1096 | /// <param name="datastore"></param> | 1101 | /// <param name="datastore"></param> |
1097 | public void ProcessBackup(IRegionDataStore datastore) | 1102 | public void ProcessBackup(IRegionDataStore datastore) |
1098 | { | 1103 | { |
1099 | // don't backup while it's selected or you're asking for changes mid stream. | ||
1100 | if (HasGroupChanged) | 1104 | if (HasGroupChanged) |
1101 | { | 1105 | { |
1106 | // don't backup while it's selected or you're asking for changes mid stream. | ||
1102 | if ((!IsSelected) && (RootPart != null)) | 1107 | if ((!IsSelected) && (RootPart != null)) |
1103 | { | 1108 | { |
1104 | m_log.InfoFormat( | 1109 | m_log.InfoFormat( |
1105 | "[SCENE]: Storing object {0}, {1} in {2}", | 1110 | "[SCENE]: Storing object {0}, {1} in {2}", |
1106 | m_rootPart.Name, UUID, m_scene.RegionInfo.RegionName); | 1111 | Name, UUID, m_scene.RegionInfo.RegionName); |
1107 | 1112 | ||
1108 | SceneObjectGroup backup_group = Copy(OwnerID, GroupID, false); | 1113 | SceneObjectGroup backup_group = Copy(OwnerID, GroupID, false); |
1109 | 1114 | ||
@@ -1117,14 +1122,10 @@ namespace OpenSim.Region.Environment.Scenes | |||
1117 | // else | 1122 | // else |
1118 | // { | 1123 | // { |
1119 | // m_log.DebugFormat( | 1124 | // m_log.DebugFormat( |
1120 | // "[SCENE OBJECT GROUP]: Did not update persistence of object {0} since it was still selected by an avatar during the backup sweep", UUID); | 1125 | // "[SCENE]: Did not update persistence of object {0} {1}, selected = {2}", |
1126 | // Name, UUID, IsSelected); | ||
1121 | // } | 1127 | // } |
1122 | } | 1128 | } |
1123 | |||
1124 | // Why is storing the inventory outside of HasGroupChanged? | ||
1125 | |||
1126 | |||
1127 | //ForEachPart(delegate(SceneObjectPart part) { part.ProcessInventoryBackup(datastore); }); | ||
1128 | } | 1129 | } |
1129 | 1130 | ||
1130 | #endregion | 1131 | #endregion |
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs index a9709b1..a5daabb 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs | |||
@@ -491,16 +491,16 @@ namespace OpenSim.Region.Environment.Scenes | |||
491 | { | 491 | { |
492 | StoreUndoState(); | 492 | StoreUndoState(); |
493 | m_offsetPosition = value; | 493 | m_offsetPosition = value; |
494 | try | 494 | //try |
495 | { | 495 | //{ |
496 | // Hack to get the child prim to update world positions in the physics engine | 496 | // Hack to get the child prim to update world positions in the physics engine |
497 | ParentGroup.ResetChildPrimPhysicsPositions(); | 497 | // ParentGroup.ResetChildPrimPhysicsPositions(); |
498 | 498 | ||
499 | } | 499 | //} |
500 | catch (NullReferenceException) | 500 | //catch (NullReferenceException) |
501 | { | 501 | //{ |
502 | // Ignore, and skip over. | 502 | // Ignore, and skip over. |
503 | } | 503 | //} |
504 | //m_log.Info("[PART]: OFFSET:" + m_offsetPosition.ToString()); | 504 | //m_log.Info("[PART]: OFFSET:" + m_offsetPosition.ToString()); |
505 | } | 505 | } |
506 | } | 506 | } |