aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/ScenePresence.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/ScenePresence.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs53
1 files changed, 38 insertions, 15 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 322afd2..300ddb3 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -941,8 +941,6 @@ namespace OpenSim.Region.Framework.Scenes
941 "[SCENE]: Upgrading child to root agent for {0} in {1}", 941 "[SCENE]: Upgrading child to root agent for {0} in {1}",
942 Name, m_scene.RegionInfo.RegionName); 942 Name, m_scene.RegionInfo.RegionName);
943 943
944 bool wasChild = IsChildAgent;
945
946 if (ParentUUID != UUID.Zero) 944 if (ParentUUID != UUID.Zero)
947 { 945 {
948 m_log.DebugFormat("[SCENE PRESENCE]: Sitting avatar back on prim {0}", ParentUUID); 946 m_log.DebugFormat("[SCENE PRESENCE]: Sitting avatar back on prim {0}", ParentUUID);
@@ -975,6 +973,9 @@ namespace OpenSim.Region.Framework.Scenes
975 IsLoggingIn = false; 973 IsLoggingIn = false;
976 } 974 }
977 975
976 //m_log.DebugFormat("[SCENE]: known regions in {0}: {1}", Scene.RegionInfo.RegionName, KnownChildRegionHandles.Count);
977
978 IsChildAgent = false;
978 979
979 IGroupsModule gm = m_scene.RequestModuleInterface<IGroupsModule>(); 980 IGroupsModule gm = m_scene.RequestModuleInterface<IGroupsModule>();
980 if (gm != null) 981 if (gm != null)
@@ -1095,22 +1096,44 @@ namespace OpenSim.Region.Framework.Scenes
1095 // and it has already rezzed the attachments and started their scripts. 1096 // and it has already rezzed the attachments and started their scripts.
1096 // We do the following only for non-login agents, because their scripts 1097 // We do the following only for non-login agents, because their scripts
1097 // haven't started yet. 1098 // haven't started yet.
1098 lock (m_attachments) 1099 if ((TeleportFlags & TeleportFlags.ViaLogin) != 0)
1100 {
1101 // We leave a 5 second pause before attempting to rez attachments to avoid a clash with
1102 // version 3 viewers that maybe doing their own attachment rezzing related to their current
1103 // outfit folder on startup. If these operations do clash, then the symptoms are invisible
1104 // attachments until one zooms in on the avatar.
1105 //
1106 // We do not pause if we are launching on the same thread anyway in order to avoid pointlessly
1107 // delaying any attachment related regression tests.
1108 if (Scene.AttachmentsModule != null)
1109 Util.FireAndForget(
1110 o =>
1111 {
1112 if (Util.FireAndForgetMethod != FireAndForgetMethod.None)
1113 System.Threading.Thread.Sleep(5000);
1114
1115 Scene.AttachmentsModule.RezAttachments(this);
1116 });
1117 }
1118 else
1099 { 1119 {
1100 if (wasChild && HasAttachments()) 1120 lock (m_attachments)
1101 { 1121 {
1102 m_log.DebugFormat( 1122 if (HasAttachments())
1103 "[SCENE PRESENCE]: Restarting scripts in attachments for {0} in {1}", Name, Scene.Name); 1123 {
1124 m_log.DebugFormat(
1125 "[SCENE PRESENCE]: Restarting scripts in attachments for {0} in {1}", Name, Scene.Name);
1104 1126
1105 // Resume scripts 1127 // Resume scripts
1106 Util.FireAndForget(delegate(object x) { 1128 Util.FireAndForget(delegate(object x) {
1107 foreach (SceneObjectGroup sog in m_attachments) 1129 foreach (SceneObjectGroup sog in m_attachments)
1108 { 1130 {
1109 sog.ScheduleGroupForFullUpdate(); 1131 sog.ScheduleGroupForFullUpdate();
1110 sog.RootPart.ParentGroup.CreateScriptInstances(0, false, m_scene.DefaultScriptEngine, GetStateSource()); 1132 sog.RootPart.ParentGroup.CreateScriptInstances(0, false, m_scene.DefaultScriptEngine, GetStateSource());
1111 sog.ResumeScripts(); 1133 sog.ResumeScripts();
1112 } 1134 }
1113 }); 1135 });
1136 }
1114 } 1137 }
1115 } 1138 }
1116 1139