diff options
author | UbitUmarov | 2014-08-14 22:03:41 +0100 |
---|---|---|
committer | UbitUmarov | 2014-08-14 22:03:41 +0100 |
commit | f798f046862e6130bf8afa9eab3e76f43683fc5f (patch) | |
tree | fce9b495d88426e611a68bd6cbd90b05f6f8dd3f | |
parent | reduce ping cliping lower limit (diff) | |
download | opensim-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.cs | 19 |
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 |