diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs index 27833e8..a3dd53e 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 | } |