diff options
Diffstat (limited to 'OpenSim/Region/Framework')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.cs | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index d187377..3e5ef10 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -3703,21 +3703,30 @@ namespace OpenSim.Region.Framework.Scenes | |||
3703 | // In the case where, for example, an A B C D region layout, an avatar may | 3703 | // In the case where, for example, an A B C D region layout, an avatar may |
3704 | // teleport from A -> D, but then -> C before A has asked B to close its old child agent. When C | 3704 | // teleport from A -> D, but then -> C before A has asked B to close its old child agent. When C |
3705 | // renews the lease on the child agent at B, we must make sure that the close from A does not succeed. | 3705 | // renews the lease on the child agent at B, we must make sure that the close from A does not succeed. |
3706 | if (!acd.ChildrenCapSeeds.ContainsKey(RegionInfo.RegionHandle)) | 3706 | // |
3707 | { | 3707 | // XXX: In the end, this should not be necessary if child agents are closed without delay on |
3708 | m_log.DebugFormat( | 3708 | // teleport, since realistically, the close request should always be processed before any other |
3709 | "[SCENE]: Setting DoNotCloseAfterTeleport for child scene presence {0} in {1} because source will attempt close.", | 3709 | // region tried to re-establish a child agent. This is much simpler since the logic below is |
3710 | sp.Name, Name); | 3710 | // vulnerable to an issue when a viewer quits a region without sending a proper logout but then |
3711 | // re-establishes the connection on a relogin. This could wrongly set the DoNotCloseAfterTeleport | ||
3712 | // flag when no teleport had taken place (and hence no close was going to come). | ||
3713 | // if (!acd.ChildrenCapSeeds.ContainsKey(RegionInfo.RegionHandle)) | ||
3714 | // { | ||
3715 | // m_log.DebugFormat( | ||
3716 | // "[SCENE]: Setting DoNotCloseAfterTeleport for child scene presence {0} in {1} because source will attempt close.", | ||
3717 | // sp.Name, Name); | ||
3718 | // | ||
3719 | // sp.DoNotCloseAfterTeleport = true; | ||
3720 | // } | ||
3721 | // else if (EntityTransferModule.IsInTransit(sp.UUID)) | ||
3711 | 3722 | ||
3712 | sp.DoNotCloseAfterTeleport = true; | 3723 | if (EntityTransferModule.IsInTransit(sp.UUID)) |
3713 | } | ||
3714 | else if (EntityTransferModule.IsInTransit(sp.UUID)) | ||
3715 | { | 3724 | { |
3725 | sp.DoNotCloseAfterTeleport = true; | ||
3726 | |||
3716 | m_log.DebugFormat( | 3727 | m_log.DebugFormat( |
3717 | "[SCENE]: Setting DoNotCloseAfterTeleport for child scene presence {0} in {1} because this region will attempt previous end-of-teleport close.", | 3728 | "[SCENE]: Set DoNotCloseAfterTeleport for child scene presence {0} in {1} because this region will attempt previous end-of-teleport close.", |
3718 | sp.Name, Name); | 3729 | sp.Name, Name); |
3719 | |||
3720 | sp.DoNotCloseAfterTeleport = true; | ||
3721 | } | 3730 | } |
3722 | } | 3731 | } |
3723 | } | 3732 | } |