diff options
author | Justin Clark-Casey (justincc) | 2013-08-08 23:29:30 +0100 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2013-08-08 23:29:30 +0100 |
commit | b1c26a56b3d615f3709363e3a2f91b5423f5891f (patch) | |
tree | ea87893e6a13813dcf383d064fe33d3b3740c7ce /OpenSim/Region/ClientStack/Linden | |
parent | minor: Remove console lines at bottom of FakeParcelIDTests() regression test ... (diff) | |
download | opensim-SC-b1c26a56b3d615f3709363e3a2f91b5423f5891f.zip opensim-SC-b1c26a56b3d615f3709363e3a2f91b5423f5891f.tar.gz opensim-SC-b1c26a56b3d615f3709363e3a2f91b5423f5891f.tar.bz2 opensim-SC-b1c26a56b3d615f3709363e3a2f91b5423f5891f.tar.xz |
Fix an issue where under teleport v2 protocol, teleporting from regions in an line from A->B->C would not close region A when reaching C
The root cause was that v2 was only closing neighbour agents if the root connection also needed a close.
However, fixing this requires the neighbour regions also detect when they should not close due to re-teleports re-establishing the child connection.
This involves restructuring the code to introduce a scene presence state machine that can serialize the different add and remove client calls that are now possible with the late close of the
This commit appears to fix these issues and improve teleport, but still has holes on at least quick reteleporting (and possibly occasionally on ordinary teleports).
Also, has not been completely tested yet in scenarios where regions are running on different simulators
Diffstat (limited to 'OpenSim/Region/ClientStack/Linden')
4 files changed, 11 insertions, 5 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/Tests/EventQueueTests.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/Tests/EventQueueTests.cs index 141af8a..626932f 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/Tests/EventQueueTests.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/Tests/EventQueueTests.cs | |||
@@ -91,7 +91,7 @@ namespace OpenSim.Region.ClientStack.Linden.Tests | |||
91 | public void RemoveForClient() | 91 | public void RemoveForClient() |
92 | { | 92 | { |
93 | TestHelpers.InMethod(); | 93 | TestHelpers.InMethod(); |
94 | // log4net.Config.XmlConfigurator.Configure(); | 94 | // TestHelpers.EnableLogging(); |
95 | 95 | ||
96 | UUID spId = TestHelpers.ParseTail(0x1); | 96 | UUID spId = TestHelpers.ParseTail(0x1); |
97 | 97 | ||
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 8b2440a..e775a81 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | |||
@@ -512,7 +512,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
512 | // We still perform a force close inside the sync lock since this is intended to attempt close where | 512 | // We still perform a force close inside the sync lock since this is intended to attempt close where |
513 | // there is some unidentified connection problem, not where we have issues due to deadlock | 513 | // there is some unidentified connection problem, not where we have issues due to deadlock |
514 | if (!IsActive && !force) | 514 | if (!IsActive && !force) |
515 | { | ||
516 | m_log.DebugFormat( | ||
517 | "[CLIENT]: Not attempting to close inactive client {0} in {1} since force flag is not set", | ||
518 | Name, m_scene.Name); | ||
519 | |||
515 | return; | 520 | return; |
521 | } | ||
516 | 522 | ||
517 | IsActive = false; | 523 | IsActive = false; |
518 | CloseWithoutChecks(); | 524 | CloseWithoutChecks(); |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs index 5c38399..de2f9d4 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs | |||
@@ -1799,9 +1799,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1799 | 1799 | ||
1800 | if (!client.SceneAgent.IsChildAgent) | 1800 | if (!client.SceneAgent.IsChildAgent) |
1801 | client.Kick("Simulator logged you out due to connection timeout."); | 1801 | client.Kick("Simulator logged you out due to connection timeout."); |
1802 | |||
1803 | client.CloseWithoutChecks(); | ||
1804 | } | 1802 | } |
1803 | |||
1804 | m_scene.IncomingCloseAgent(client.AgentId, true); | ||
1805 | } | 1805 | } |
1806 | 1806 | ||
1807 | private void IncomingPacketHandler() | 1807 | private void IncomingPacketHandler() |
@@ -2142,7 +2142,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
2142 | if (!client.IsLoggingOut) | 2142 | if (!client.IsLoggingOut) |
2143 | { | 2143 | { |
2144 | client.IsLoggingOut = true; | 2144 | client.IsLoggingOut = true; |
2145 | client.Close(); | 2145 | m_scene.IncomingCloseAgent(client.AgentId, false); |
2146 | } | 2146 | } |
2147 | } | 2147 | } |
2148 | } | 2148 | } |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/Tests/BasicCircuitTests.cs b/OpenSim/Region/ClientStack/Linden/UDP/Tests/BasicCircuitTests.cs index b47ff54..9700224 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/Tests/BasicCircuitTests.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/Tests/BasicCircuitTests.cs | |||
@@ -200,7 +200,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP.Tests | |||
200 | public void TestLogoutClientDueToAck() | 200 | public void TestLogoutClientDueToAck() |
201 | { | 201 | { |
202 | TestHelpers.InMethod(); | 202 | TestHelpers.InMethod(); |
203 | // TestHelpers.EnableLogging(); | 203 | TestHelpers.EnableLogging(); |
204 | 204 | ||
205 | IniConfigSource ics = new IniConfigSource(); | 205 | IniConfigSource ics = new IniConfigSource(); |
206 | IConfig config = ics.AddConfig("ClientStack.LindenUDP"); | 206 | IConfig config = ics.AddConfig("ClientStack.LindenUDP"); |