From 9ab0c81c1dfb95e423d73599bd1fc66778749f0d Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Mon, 21 May 2012 21:33:59 +0100
Subject: Setting 'in transit' on a local teleport as well as inter-region
 teleports.

This is to eliminate possible race conditions if two teleport calls are made concurrently, where at least one is a local teleport.
This is pretty much impossible on a manual user teleport but can happen on script-invoked teleports.
---
 .../CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | 9 +++++++++
 1 file changed, 9 insertions(+)

(limited to 'OpenSim/Region')

diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index 5dbe5e4..36e9da6 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -230,6 +230,13 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
                 "[ENTITY TRANSFER MODULE]: Teleport for {0} to {1} within {2}",
                 sp.Name, position, sp.Scene.RegionInfo.RegionName);
 
+            if (!SetInTransit(sp.UUID))
+            {
+                m_log.DebugFormat(
+                    "[ENTITY TRANSFER MODULE]: Ignoring within region teleport request of {0} {1} to {2} - agent is already in transit.",
+                    sp.Name, sp.UUID, position);
+            }
+
             // Teleport within the same region
             if (IsOutsideRegion(sp.Scene, position) || position.Z < 0)
             {
@@ -268,6 +275,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
             {
                 sp.Scene.EventManager.TriggerOnScriptChangedEvent(grp.LocalId, (uint)Changed.TELEPORT);
             }
+
+            ResetFromTransit(sp.UUID);            
         }
 
         /// <summary>
-- 
cgit v1.1