aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs12
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs19
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs3
3 files changed, 23 insertions, 11 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 928bcd0..6e4c0b1 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -1258,12 +1258,16 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1258 1258
1259 if (neighbour.RegionHandle != sp.Scene.RegionInfo.RegionHandle) 1259 if (neighbour.RegionHandle != sp.Scene.RegionInfo.RegionHandle)
1260 { 1260 {
1261 InformClientOfNeighbourDelegate d = InformClientOfNeighbourAsync;
1262 try 1261 try
1263 { 1262 {
1264 d.BeginInvoke(sp, cagents[count], neighbour, neighbour.ExternalEndPoint, newAgent, 1263 // Let's put this back at sync, so that it doesn't clog
1265 InformClientOfNeighbourCompleted, 1264 // the network, especially for regions in the same physical server.
1266 d); 1265 // We're really not in a hurry here.
1266 InformClientOfNeighbourAsync(sp, cagents[count], neighbour, neighbour.ExternalEndPoint, newAgent);
1267 //InformClientOfNeighbourDelegate d = InformClientOfNeighbourAsync;
1268 //d.BeginInvoke(sp, cagents[count], neighbour, neighbour.ExternalEndPoint, newAgent,
1269 // InformClientOfNeighbourCompleted,
1270 // d);
1267 } 1271 }
1268 1272
1269 catch (ArgumentOutOfRangeException) 1273 catch (ArgumentOutOfRangeException)
diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
index 58a7b20..c04171b 100644
--- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
@@ -140,6 +140,7 @@ namespace OpenSim.Region.Framework.Scenes
140 icon.EndInvoke(iar); 140 icon.EndInvoke(iar);
141 } 141 }
142 142
143 ExpiringCache<string, bool> _failedSims = new ExpiringCache<string, bool>();
143 public void SendChildAgentDataUpdate(AgentPosition cAgentData, ScenePresence presence) 144 public void SendChildAgentDataUpdate(AgentPosition cAgentData, ScenePresence presence)
144 { 145 {
145 // This assumes that we know what our neighbors are. 146 // This assumes that we know what our neighbors are.
@@ -156,16 +157,22 @@ namespace OpenSim.Region.Framework.Scenes
156 // that the region position is cached or performance will degrade 157 // that the region position is cached or performance will degrade
157 Utils.LongToUInts(regionHandle, out x, out y); 158 Utils.LongToUInts(regionHandle, out x, out y);
158 GridRegion dest = m_scene.GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y); 159 GridRegion dest = m_scene.GridService.GetRegionByPosition(UUID.Zero, (int)x, (int)y);
159 if (! simulatorList.Contains(dest.ServerURI)) 160 bool v = true;
161 if (! simulatorList.Contains(dest.ServerURI) && !_failedSims.TryGetValue(dest.ServerURI, out v))
160 { 162 {
161 // we havent seen this simulator before, add it to the list 163 // we havent seen this simulator before, add it to the list
162 // and send it an update 164 // and send it an update
163 simulatorList.Add(dest.ServerURI); 165 simulatorList.Add(dest.ServerURI);
164 166 // Let move this to sync. Mono definitely does not like async networking.
165 SendChildAgentDataUpdateDelegate d = SendChildAgentDataUpdateAsync; 167 if (!m_scene.SimulationService.UpdateAgent(dest, cAgentData))
166 d.BeginInvoke(cAgentData, m_regionInfo.ScopeID, dest, 168 // Also if it fails, get it out of the loop for a bit
167 SendChildAgentDataUpdateCompleted, 169 _failedSims.Add(dest.ServerURI, true, 120);
168 d); 170
171 // Leaving this here as a reminder that we tried, and it sucks.
172 //SendChildAgentDataUpdateDelegate d = SendChildAgentDataUpdateAsync;
173 //d.BeginInvoke(cAgentData, m_regionInfo.ScopeID, dest,
174 // SendChildAgentDataUpdateCompleted,
175 // d);
169 } 176 }
170 } 177 }
171 } 178 }
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 77f7b32..8639697 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -2738,7 +2738,8 @@ namespace OpenSim.Region.Framework.Scenes
2738 AgentPosition agentpos = new AgentPosition(); 2738 AgentPosition agentpos = new AgentPosition();
2739 agentpos.CopyFrom(cadu); 2739 agentpos.CopyFrom(cadu);
2740 2740
2741 m_scene.SendOutChildAgentUpdates(agentpos, this); 2741 // Let's get this out of the update loop
2742 Util.FireAndForget(delegate { m_scene.SendOutChildAgentUpdates(agentpos, this); });
2742 } 2743 }
2743 } 2744 }
2744 2745