aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorUbitUmarov2014-08-14 22:03:41 +0100
committerUbitUmarov2014-08-14 22:03:41 +0100
commitf798f046862e6130bf8afa9eab3e76f43683fc5f (patch)
treefce9b495d88426e611a68bd6cbd90b05f6f8dd3f
parent reduce ping cliping lower limit (diff)
downloadopensim-SC-f798f046862e6130bf8afa9eab3e76f43683fc5f.zip
opensim-SC-f798f046862e6130bf8afa9eab3e76f43683fc5f.tar.gz
opensim-SC-f798f046862e6130bf8afa9eab3e76f43683fc5f.tar.bz2
opensim-SC-f798f046862e6130bf8afa9eab3e76f43683fc5f.tar.xz
add a extra delay in EnableChildAgents between CreateAgent() return and
telling client to connect, to account for potencial async tasks that need to finish before the client knocks at the door. Empirical value used
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs19
1 files changed, 14 insertions, 5 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 71148ea..b0483e0 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -1870,7 +1870,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1870 if (external != null) 1870 if (external != null)
1871 { 1871 {
1872 InformClientOfNeighbourDelegate d = InformClientOfNeighbourAsync; 1872 InformClientOfNeighbourDelegate d = InformClientOfNeighbourAsync;
1873 d.BeginInvoke(sp, agent, region, external, true, 1873 d.BeginInvoke(sp, agent, region, external, true,true,
1874 InformClientOfNeighbourCompleted, 1874 InformClientOfNeighbourCompleted,
1875 d); 1875 d);
1876 } 1876 }
@@ -1880,7 +1880,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1880 #region Enable Child Agents 1880 #region Enable Child Agents
1881 1881
1882 private delegate void InformClientOfNeighbourDelegate( 1882 private delegate void InformClientOfNeighbourDelegate(
1883 ScenePresence avatar, AgentCircuitData a, GridRegion reg, IPEndPoint endPoint, bool newAgent); 1883 ScenePresence avatar, AgentCircuitData a, GridRegion reg, IPEndPoint endPoint, bool newAgent, bool doInitialDelay);
1884 1884
1885 /// <summary> 1885 /// <summary>
1886 /// This informs all neighbouring regions about agent "avatar". 1886 /// This informs all neighbouring regions about agent "avatar".
@@ -1993,6 +1993,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
1993 1993
1994 bool newAgent = false; 1994 bool newAgent = false;
1995 int count = 0; 1995 int count = 0;
1996 bool delay = true;
1996 foreach (GridRegion neighbour in neighbours) 1997 foreach (GridRegion neighbour in neighbours)
1997 { 1998 {
1998 //m_log.WarnFormat("--> Going to send child agent to {0}", neighbour.RegionName); 1999 //m_log.WarnFormat("--> Going to send child agent to {0}", neighbour.RegionName);
@@ -2010,7 +2011,9 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
2010 // Let's put this back at sync, so that it doesn't clog 2011 // Let's put this back at sync, so that it doesn't clog
2011 // the network, especially for regions in the same physical server. 2012 // the network, especially for regions in the same physical server.
2012 // We're really not in a hurry here. 2013 // We're really not in a hurry here.
2013 InformClientOfNeighbourAsync(sp, cagents[count], neighbour, neighbour.ExternalEndPoint, newAgent); 2014 InformClientOfNeighbourAsync(sp, cagents[count], neighbour, neighbour.ExternalEndPoint, newAgent, delay);
2015 delay = false; // ugly i know.. but there aren't that many neighbours
2016
2014 //InformClientOfNeighbourDelegate d = InformClientOfNeighbourAsync; 2017 //InformClientOfNeighbourDelegate d = InformClientOfNeighbourAsync;
2015 //d.BeginInvoke(sp, cagents[count], neighbour, neighbour.ExternalEndPoint, newAgent, 2018 //d.BeginInvoke(sp, cagents[count], neighbour, neighbour.ExternalEndPoint, newAgent,
2016 // InformClientOfNeighbourCompleted, 2019 // InformClientOfNeighbourCompleted,
@@ -2077,11 +2080,12 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
2077 /// <param name="regionHandle"></param> 2080 /// <param name="regionHandle"></param>
2078 /// <param name="endPoint"></param> 2081 /// <param name="endPoint"></param>
2079 private void InformClientOfNeighbourAsync(ScenePresence sp, AgentCircuitData a, GridRegion reg, 2082 private void InformClientOfNeighbourAsync(ScenePresence sp, AgentCircuitData a, GridRegion reg,
2080 IPEndPoint endPoint, bool newAgent) 2083 IPEndPoint endPoint, bool newAgent,bool doinitialdelay)
2081 { 2084 {
2082 // Let's wait just a little to give time to originating regions to catch up with closing child agents 2085 // Let's wait just a little to give time to originating regions to catch up with closing child agents
2083 // after a cross here 2086 // after a cross here
2084 Thread.Sleep(500); 2087 if(doinitialdelay)
2088 Thread.Sleep(500);
2085 2089
2086 Scene scene = sp.Scene; 2090 Scene scene = sp.Scene;
2087 2091
@@ -2097,6 +2101,11 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
2097 2101
2098 if (regionAccepted && newAgent) 2102 if (regionAccepted && newAgent)
2099 { 2103 {
2104 // give some time for createAgent finish possible async tasks
2105 int dly = 100 - sp.ControllingClient.PingTimeMS;
2106 if (dly > 20)
2107 Thread.Sleep(dly);
2108
2100 if (m_eqModule != null) 2109 if (m_eqModule != null)
2101 { 2110 {
2102 #region IP Translation for NAT 2111 #region IP Translation for NAT