diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index 0561dbbffd..2ce72b693b 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs @@ -1599,11 +1599,11 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer public bool Cross(ScenePresence agent, bool isFlying) { - agent.IsInLocalTransit = true; - agent.IsInTransit = true; + ScenePresence ag = agent; + ag.IsInLocalTransit = true; + ag.IsInTransit = true; WorkManager.RunInThreadPool(delegate { - ScenePresence ag = agent; CrossAsync(ag, isFlying); if (ag.IsDeleted) return; @@ -1616,7 +1616,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Crossing agent {0} {1} completed.", ag.Firstname, ag.Lastname); ag.IsInTransit = false; - }, null,"AgentRegionCross-"+agent.UUID.ToString()); + }, null,"AgentRegionCross-"+ag.UUID.ToString()); return true; } @@ -1972,10 +1972,12 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer IPEndPoint external = region.ExternalEndPoint; if (external != null) { - InformClientOfNeighbourDelegate d = InformClientOfNeighbourAsync; - d.BeginInvoke(sp, agent, region, external, true, - InformClientOfNeighbourCompleted, - d); + ScenePresence avatar = sp; + GridRegion reg = region; + WorkManager.RunInThreadPool(delegate + { + InformClientOfNeighbourAsync(avatar, agent, reg, external, true); + },"InformClientOfNeighbourAsync" + avatar.UUID.ToString()); } } @@ -1983,9 +1985,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer #region Enable Child Agents - private delegate void InformClientOfNeighbourDelegate( - ScenePresence avatar, AgentCircuitData a, GridRegion reg, IPEndPoint endPoint, bool newAgent); - List RegionsInView(Vector3 pos, RegionInfo curregion, List fullneighbours, float viewrange) { List ret = new List(); @@ -2542,13 +2541,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer return null; } - private void InformClientOfNeighbourCompleted(IAsyncResult iar) - { - InformClientOfNeighbourDelegate icon = (InformClientOfNeighbourDelegate)iar.AsyncState; - icon.EndInvoke(iar); - //m_log.WarnFormat(" --> InformClientOfNeighbourCompleted"); - } - /// /// Async component for informing client of which neighbours exist /// diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs index 078971fee5..547535c5a0 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/HGEntityTransferModule.cs @@ -266,7 +266,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer { // this user is going to another grid // for local users, check if HyperGrid teleport is allowed, based on user level - if (Scene.UserManagementModule.IsLocalGridUser(sp.UUID) && sp.GodController.UserLevel < m_levelHGTeleport) + bool isLocal = Scene.UserManagementModule.IsLocalGridUser(sp.UUID); + if (isLocal && sp.GodController.UserLevel < m_levelHGTeleport) { m_log.WarnFormat("[HG ENTITY TRANSFER MODULE]: Unable to HG teleport agent due to insufficient UserLevel."); reason = "Hypergrid teleport not allowed";