aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorDiva Canto2013-07-13 09:46:58 -0700
committerDiva Canto2013-07-13 09:46:58 -0700
commita412b1d6823141129bef3ab906c6590eb6a81c72 (patch)
tree95398de72d494bb32c710d43ab2b253d972fc6fe /OpenSim/Region
parentAdded UploadBakedTexture/UploadBakedTextureServerConnector, so that this can ... (diff)
downloadopensim-SC-a412b1d6823141129bef3ab906c6590eb6a81c72.zip
opensim-SC-a412b1d6823141129bef3ab906c6590eb6a81c72.tar.gz
opensim-SC-a412b1d6823141129bef3ab906c6590eb6a81c72.tar.bz2
opensim-SC-a412b1d6823141129bef3ab906c6590eb6a81c72.tar.xz
Moved SendInitialDataToMe to earlier in CompleteMovement. Moved TriggerOnMakeRootAgent to the end of CompleteMovement.
Justin, if you read this, there's a long story here. Some time ago you placed SendInitialDataToMe at the very beginning of client creation (in LLUDPServer). That is problematic, as we discovered relatively recently: on TPs, as soon as the client starts getting data from child agents, it starts requesting resources back *from the simulator where its root agent is*. We found this to be the problem behind meshes missing on HG TPs (because the viewer was requesting the meshes of the receiving sim from the departing grid). But this affects much more than meshes and HG TPs. It may also explain cloud avatars after a local TP: baked textures are only stored in the simulator, so if a child agent receives a UUID of a baked texture in the destination sim and requests that texture from the departing sim where the root agent is, it will fail to get that texture. Bottom line: we need to delay sending the new simulator data to the viewer until we are absolutely sure that the viewer knows that its main agent is in a new sim. Hence, moving it to CompleteMovement. Now I am trying to tune the initial rez delay that we all experience in the CC. I think that when I fixed the issue described above, I may have moved SendInitialDataToMe to much later than it should be, so now I'm moving to earlier in CompleteMovement.
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs19
2 files changed, 15 insertions, 6 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
index 2aab4f9..85270a6 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
@@ -1469,7 +1469,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1469 { 1469 {
1470 AgentCircuitData aCircuit = m_scene.AuthenticateHandler.GetAgentCircuitData(uccp.CircuitCode.Code); 1470 AgentCircuitData aCircuit = m_scene.AuthenticateHandler.GetAgentCircuitData(uccp.CircuitCode.Code);
1471 bool tp = (aCircuit.teleportFlags > 0); 1471 bool tp = (aCircuit.teleportFlags > 0);
1472 // Let's delay this for TP agents, otherwise the viewer doesn't know where to get meshes from 1472 // Let's delay this for TP agents, otherwise the viewer doesn't know where to get resources from
1473 if (!tp) 1473 if (!tp)
1474 client.SceneAgent.SendInitialDataToMe(); 1474 client.SceneAgent.SendInitialDataToMe();
1475 } 1475 }
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 774546c..bd4f68e 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -1010,7 +1010,9 @@ namespace OpenSim.Region.Framework.Scenes
1010 // recorded, which stops the input from being processed. 1010 // recorded, which stops the input from being processed.
1011 MovementFlag = 0; 1011 MovementFlag = 0;
1012 1012
1013 m_scene.EventManager.TriggerOnMakeRootAgent(this); 1013 // DIVA NOTE: I moved TriggerOnMakeRootAgent out of here and into the end of
1014 // CompleteMovement. We don't want modules doing heavy computation before CompleteMovement
1015 // is over.
1014 } 1016 }
1015 1017
1016 public int GetStateSource() 1018 public int GetStateSource()
@@ -1327,10 +1329,15 @@ namespace OpenSim.Region.Framework.Scenes
1327 bool flying = ((m_AgentControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_FLY) != 0); 1329 bool flying = ((m_AgentControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_FLY) != 0);
1328 MakeRootAgent(AbsolutePosition, flying); 1330 MakeRootAgent(AbsolutePosition, flying);
1329 ControllingClient.MoveAgentIntoRegion(m_scene.RegionInfo, AbsolutePosition, look); 1331 ControllingClient.MoveAgentIntoRegion(m_scene.RegionInfo, AbsolutePosition, look);
1332 // Remember in HandleUseCircuitCode, we delayed this to here
1333 // This will also send the initial data to clients when TP to a neighboring region.
1334 // Not ideal, but until we know we're TP-ing from a neighboring region, there's not much we can do
1335 if (m_teleportFlags > 0)
1336 SendInitialDataToMe();
1330 1337
1331// m_log.DebugFormat("[SCENE PRESENCE] Completed movement"); 1338// m_log.DebugFormat("[SCENE PRESENCE] Completed movement");
1332 1339
1333 if ((m_callbackURI != null) && !m_callbackURI.Equals("")) 1340 if (!string.IsNullOrEmpty(m_callbackURI))
1334 { 1341 {
1335 // We cannot sleep here since this would hold up the inbound packet processing thread, as 1342 // We cannot sleep here since this would hold up the inbound packet processing thread, as
1336 // CompleteMovement() is executed synchronously. However, it might be better to delay the release 1343 // CompleteMovement() is executed synchronously. However, it might be better to delay the release
@@ -1358,9 +1365,6 @@ namespace OpenSim.Region.Framework.Scenes
1358 // Create child agents in neighbouring regions 1365 // Create child agents in neighbouring regions
1359 if (openChildAgents && !IsChildAgent) 1366 if (openChildAgents && !IsChildAgent)
1360 { 1367 {
1361 // Remember in HandleUseCircuitCode, we delayed this to here
1362 SendInitialDataToMe();
1363
1364 IEntityTransferModule m_agentTransfer = m_scene.RequestModuleInterface<IEntityTransferModule>(); 1368 IEntityTransferModule m_agentTransfer = m_scene.RequestModuleInterface<IEntityTransferModule>();
1365 if (m_agentTransfer != null) 1369 if (m_agentTransfer != null)
1366 Util.FireAndForget(delegate { m_agentTransfer.EnableChildAgents(this); }); 1370 Util.FireAndForget(delegate { m_agentTransfer.EnableChildAgents(this); });
@@ -1382,6 +1386,11 @@ namespace OpenSim.Region.Framework.Scenes
1382// m_log.DebugFormat( 1386// m_log.DebugFormat(
1383// "[SCENE PRESENCE]: Completing movement of {0} into region {1} took {2}ms", 1387// "[SCENE PRESENCE]: Completing movement of {0} into region {1} took {2}ms",
1384// client.Name, Scene.RegionInfo.RegionName, (DateTime.Now - startTime).Milliseconds); 1388// client.Name, Scene.RegionInfo.RegionName, (DateTime.Now - startTime).Milliseconds);
1389
1390 // DIVA NOTE: moved this here from MakeRoot. We don't want modules making heavy
1391 // computations before CompleteMovement is over
1392 m_scene.EventManager.TriggerOnMakeRootAgent(this);
1393
1385 } 1394 }
1386 1395
1387 /// <summary> 1396 /// <summary>