aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs28
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs41
3 files changed, 32 insertions, 39 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
index ad17aa9..a46834c 100644
--- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs
@@ -197,7 +197,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
197 return; 197 return;
198 } 198 }
199 199
200// m_log.DebugFormat("[ATTACHMENTS MODULE]: Rezzing any attachments for {0}", sp.Name); 200// m_log.DebugFormat("[ATTACHMENTS MODULE]: Rezzing any attachments for {0} from simulator-side", sp.Name);
201 201
202 List<AvatarAttachment> attachments = sp.Appearance.GetAttachments(); 202 List<AvatarAttachment> attachments = sp.Appearance.GetAttachments();
203 foreach (AvatarAttachment attach in attachments) 203 foreach (AvatarAttachment attach in attachments)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 45cbdd5..0ac4027 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -2820,34 +2820,6 @@ namespace OpenSim.Region.Framework.Scenes
2820 m_eventManager.TriggerOnNewPresence(sp); 2820 m_eventManager.TriggerOnNewPresence(sp);
2821 2821
2822 sp.TeleportFlags = (TPFlags)aCircuit.teleportFlags; 2822 sp.TeleportFlags = (TPFlags)aCircuit.teleportFlags;
2823
2824 // The first agent upon login is a root agent by design.
2825 // For this agent we will have to rez the attachments.
2826 // All other AddNewClient calls find aCircuit.child to be true.
2827 if (aCircuit.child == false)
2828 {
2829 // We have to set SP to be a root agent here so that SP.MakeRootAgent() will later not try to
2830 // start the scripts again (since this is done in RezAttachments()).
2831 // XXX: This is convoluted.
2832 sp.IsChildAgent = false;
2833
2834 // We leave a 5 second pause before attempting to rez attachments to avoid a clash with
2835 // version 3 viewers that maybe doing their own attachment rezzing related to their current
2836 // outfit folder on startup. If these operations do clash, then the symptoms are invisible
2837 // attachments until one zooms in on the avatar.
2838 //
2839 // We do not pause if we are launching on the same thread anyway in order to avoid pointlessly
2840 // delaying any attachment related regression tests.
2841 if (AttachmentsModule != null)
2842 Util.FireAndForget(
2843 o =>
2844 {
2845 if (Util.FireAndForgetMethod != FireAndForgetMethod.None)
2846 Thread.Sleep(5000);
2847
2848 AttachmentsModule.RezAttachments(sp);
2849 });
2850 }
2851 } 2823 }
2852 else 2824 else
2853 { 2825 {
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index f3b923f..4fb9a1b 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -866,7 +866,6 @@ namespace OpenSim.Region.Framework.Scenes
866 866
867 //m_log.DebugFormat("[SCENE]: known regions in {0}: {1}", Scene.RegionInfo.RegionName, KnownChildRegionHandles.Count); 867 //m_log.DebugFormat("[SCENE]: known regions in {0}: {1}", Scene.RegionInfo.RegionName, KnownChildRegionHandles.Count);
868 868
869 bool wasChild = IsChildAgent;
870 IsChildAgent = false; 869 IsChildAgent = false;
871 870
872 IGroupsModule gm = m_scene.RequestModuleInterface<IGroupsModule>(); 871 IGroupsModule gm = m_scene.RequestModuleInterface<IGroupsModule>();
@@ -952,18 +951,40 @@ namespace OpenSim.Region.Framework.Scenes
952 // and it has already rezzed the attachments and started their scripts. 951 // and it has already rezzed the attachments and started their scripts.
953 // We do the following only for non-login agents, because their scripts 952 // We do the following only for non-login agents, because their scripts
954 // haven't started yet. 953 // haven't started yet.
955 lock (m_attachments) 954 if ((TeleportFlags & TeleportFlags.ViaLogin) != 0)
955 {
956 // We leave a 5 second pause before attempting to rez attachments to avoid a clash with
957 // version 3 viewers that maybe doing their own attachment rezzing related to their current
958 // outfit folder on startup. If these operations do clash, then the symptoms are invisible
959 // attachments until one zooms in on the avatar.
960 //
961 // We do not pause if we are launching on the same thread anyway in order to avoid pointlessly
962 // delaying any attachment related regression tests.
963 if (Scene.AttachmentsModule != null)
964 Util.FireAndForget(
965 o =>
966 {
967 if (Util.FireAndForgetMethod != FireAndForgetMethod.None)
968 System.Threading.Thread.Sleep(5000);
969
970 Scene.AttachmentsModule.RezAttachments(this);
971 });
972 }
973 else
956 { 974 {
957 if (wasChild && HasAttachments()) 975 lock (m_attachments)
958 { 976 {
959 m_log.DebugFormat( 977 if (HasAttachments())
960 "[SCENE PRESENCE]: Restarting scripts in attachments for {0} in {1}", Name, Scene.Name);
961
962 // Resume scripts
963 foreach (SceneObjectGroup sog in m_attachments)
964 { 978 {
965 sog.RootPart.ParentGroup.CreateScriptInstances(0, false, m_scene.DefaultScriptEngine, GetStateSource()); 979 m_log.DebugFormat(
966 sog.ResumeScripts(); 980 "[SCENE PRESENCE]: Restarting scripts in attachments for {0} in {1}", Name, Scene.Name);
981
982 // Resume scripts
983 foreach (SceneObjectGroup sog in m_attachments)
984 {
985 sog.RootPart.ParentGroup.CreateScriptInstances(0, false, m_scene.DefaultScriptEngine, GetStateSource());
986 sog.ResumeScripts();
987 }
967 } 988 }
968 } 989 }
969 } 990 }