aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2012-05-03 22:30:36 +0100
committerJustin Clark-Casey (justincc)2012-05-03 22:30:36 +0100
commitfcd5b0817be93ccbb9897b424f70c5081a445e9f (patch)
treee941c30740e283bbf7d2e2a648b7f804a99d4729 /OpenSim/Region/Framework
parentRemove the somewhat misleading logging of the string length of some unknown r... (diff)
downloadopensim-SC_OLD-fcd5b0817be93ccbb9897b424f70c5081a445e9f.zip
opensim-SC_OLD-fcd5b0817be93ccbb9897b424f70c5081a445e9f.tar.gz
opensim-SC_OLD-fcd5b0817be93ccbb9897b424f70c5081a445e9f.tar.bz2
opensim-SC_OLD-fcd5b0817be93ccbb9897b424f70c5081a445e9f.tar.xz
Reinsert a 2000ms delay before closing a no longer required agent on the source region after teleport to resolve Imprudence teleport problems.
Viewers 1 and 3 are fine with doing this immediately. However, Imprudence has a small delay (<200ms, >500ms) after receiving the AgentCompleteMovement reply packet on the destination region before regarding that region as the currnet region. If Imprudence receives a DisableSimulator in this period, it quits. We are not restoring the full 5000ms delay since this brings back a bug where teleports permanently fail if an avatar tries to teleport back too quickly. This commit also sends the AgentCompleteMovement packet to the client before telling the source region to release its old agent, in order to further cut down any possibility of the DisableSimulator being recieved before the AgentMovementComplete.
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs14
1 files changed, 10 insertions, 4 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index e5a9a99..91e6e5a 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -1140,9 +1140,19 @@ namespace OpenSim.Region.Framework.Scenes
1140 1140
1141 bool flying = ((m_AgentControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_FLY) != 0); 1141 bool flying = ((m_AgentControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_FLY) != 0);
1142 MakeRootAgent(AbsolutePosition, flying); 1142 MakeRootAgent(AbsolutePosition, flying);
1143 ControllingClient.MoveAgentIntoRegion(m_scene.RegionInfo, AbsolutePosition, look);
1144
1145// m_log.DebugFormat("[SCENE PRESENCE] Completed movement");
1143 1146
1144 if ((m_callbackURI != null) && !m_callbackURI.Equals("")) 1147 if ((m_callbackURI != null) && !m_callbackURI.Equals(""))
1145 { 1148 {
1149 // We cannot sleep here since this would hold up the inbound packet processing thread, as
1150 // CompleteMovement() is executed synchronously. However, it might be better to delay the release
1151 // here until we know for sure that the agent is active in this region. Sending AgentMovementComplete
1152 // is not enough for Imprudence clients - there appears to be a small delay (<200ms, <500ms) until they regard this
1153 // region as the current region, meaning that a close sent before then will fail the teleport.
1154// System.Threading.Thread.Sleep(2000);
1155
1146 m_log.DebugFormat( 1156 m_log.DebugFormat(
1147 "[SCENE PRESENCE]: Releasing {0} {1} with callback to {2}", 1157 "[SCENE PRESENCE]: Releasing {0} {1} with callback to {2}",
1148 client.Name, client.AgentId, m_callbackURI); 1158 client.Name, client.AgentId, m_callbackURI);
@@ -1151,9 +1161,6 @@ namespace OpenSim.Region.Framework.Scenes
1151 m_callbackURI = null; 1161 m_callbackURI = null;
1152 } 1162 }
1153 1163
1154// m_log.DebugFormat("[SCENE PRESENCE] Completed movement");
1155
1156 ControllingClient.MoveAgentIntoRegion(m_scene.RegionInfo, AbsolutePosition, look);
1157 ValidateAndSendAppearanceAndAgentData(); 1164 ValidateAndSendAppearanceAndAgentData();
1158 1165
1159 // Create child agents in neighbouring regions 1166 // Create child agents in neighbouring regions
@@ -1168,7 +1175,6 @@ namespace OpenSim.Region.Framework.Scenes
1168 friendsModule.SendFriendsOnlineIfNeeded(ControllingClient); 1175 friendsModule.SendFriendsOnlineIfNeeded(ControllingClient);
1169 } 1176 }
1170 1177
1171
1172// m_log.DebugFormat( 1178// m_log.DebugFormat(
1173// "[SCENE PRESENCE]: Completing movement of {0} into region {1} took {2}ms", 1179// "[SCENE PRESENCE]: Completing movement of {0} into region {1} took {2}ms",
1174// client.Name, Scene.RegionInfo.RegionName, (DateTime.Now - startTime).Milliseconds); 1180// client.Name, Scene.RegionInfo.RegionName, (DateTime.Now - startTime).Milliseconds);