aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ClientStack/Linden
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2013-08-08 23:29:30 +0100
committerJustin Clark-Casey (justincc)2013-08-08 23:29:30 +0100
commitb1c26a56b3d615f3709363e3a2f91b5423f5891f (patch)
treeea87893e6a13813dcf383d064fe33d3b3740c7ce /OpenSim/Region/ClientStack/Linden
parentminor: Remove console lines at bottom of FakeParcelIDTests() regression test ... (diff)
downloadopensim-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')
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/EventQueue/Tests/EventQueueTests.cs2
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs6
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs6
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/Tests/BasicCircuitTests.cs2
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");