From dca1ca1d071069d04c2d56e1d60d357b3291b598 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Mon, 28 May 2012 22:14:37 +0100 Subject: [PATCH] If handling the failure of teleport, move agent state to CleaningUp when we start the handling. Also fixes the log warning from ResetInTransit() if the state is cleared direct from Transferring or ReceiveAtDestination, as pointed out in mantis 5426 --- .../Framework/EntityTransfer/EntityTransferModule.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index 803a41dff6..7590826c56 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs @@ -678,13 +678,14 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer protected virtual void Fail(ScenePresence sp, GridRegion finalDestination, bool logout) { + UpdateInTransit(sp.UUID, AgentTransferState.CleaningUp); + // Client never contacted destination. Let's restore everything back sp.ControllingClient.SendTeleportFailed("Problems connecting to destination."); // Fail. Reset it back sp.IsChildAgent = false; ReInstantiateScripts(sp); - ResetFromTransit(sp.UUID); EnableChildAgents(sp); @@ -692,6 +693,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer m_scene.SimulationService.CloseAgent(finalDestination, sp.UUID); sp.Scene.EventManager.TriggerTeleportFail(sp.ControllingClient, logout); + + ResetFromTransit(sp.UUID); } protected virtual bool CreateAgent(ScenePresence sp, GridRegion reg, GridRegion finalDestination, AgentCircuitData agentCircuit, uint teleportFlags, out string reason, out bool logout) @@ -2152,8 +2155,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer // FIXME: For now, we allow exit from any state since a thrown exception in teleport is now guranteed // to be handled properly - ResetFromTransit() could be invoked at any step along the process m_log.WarnFormat( - "[ENTITY TRANSFER MODULE]: Agent with ID should not exit directly from state {1}, should go to {2} state first", - state, AgentTransferState.CleaningUp); + "[ENTITY TRANSFER MODULE]: Agent with ID {0} should not exit directly from state {1}, should go to {2} state first", + id, state, AgentTransferState.CleaningUp); // throw new Exception( // "Agent with ID {0} cannot exit directly from state {1}, it must go to {2} state first",