mirror of
https://github.com/opensim/opensim.git
synced 2026-08-11 11:57:03 +08:00
Stop it being possible for an agent to teleport back to its source region before the source region has finished cleaning up old agent data and structures.
If this is allowed, then the client usually gets forcibly logged out and data structures might be put into bad states. To prevent this, the binary state machine of EMT.m_agentsInTransit is replaced with a 4 state machine (Preparing, Transferring, ReceivedAtDestination, CleaningUp). This is necessary because the source region needs to know when the destination region has received the user but a teleport back cannot happen until the source region has cleaned up. Tested on standalone, grid and with v1 and v3 clients.
This commit is contained in:
@@ -5212,10 +5212,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
{
|
||||
if (EntityTransferModule.IsInTransit(agentID))
|
||||
{
|
||||
reason = "Agent is already in transit on this region";
|
||||
reason = "Agent is still in transit from this region";
|
||||
|
||||
m_log.DebugFormat(
|
||||
"[SCENE]: Denying agent {0} entry into {1} since region already has them registered as in transit",
|
||||
m_log.WarnFormat(
|
||||
"[SCENE]: Denying agent {0} entry into {1} since region still has them registered as in transit",
|
||||
agentID, RegionInfo.RegionName);
|
||||
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user