diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/Scene.cs')
-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 4fa4a7c..56bdc63 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -3862,21 +3862,30 @@ namespace OpenSim.Region.Framework.Scenes | |||
3862 | // In the case where, for example, an A B C D region layout, an avatar may | 3862 | // In the case where, for example, an A B C D region layout, an avatar may |
3863 | // teleport from A -> D, but then -> C before A has asked B to close its old child agent. When C | 3863 | // teleport from A -> D, but then -> C before A has asked B to close its old child agent. When C |
3864 | // renews the lease on the child agent at B, we must make sure that the close from A does not succeed. | 3864 | // renews the lease on the child agent at B, we must make sure that the close from A does not succeed. |
3865 | if (!acd.ChildrenCapSeeds.ContainsKey(RegionInfo.RegionHandle)) | 3865 | // |
3866 | { | 3866 | // XXX: In the end, this should not be necessary if child agents are closed without delay on |
3867 | m_log.DebugFormat( | 3867 | // teleport, since realistically, the close request should always be processed before any other |
3868 | "[SCENE]: Setting DoNotCloseAfterTeleport for child scene presence {0} in {1} because source will attempt close.", | 3868 | // region tried to re-establish a child agent. This is much simpler since the logic below is |
3869 | sp.Name, Name); | 3869 | // vulnerable to an issue when a viewer quits a region without sending a proper logout but then |
3870 | // re-establishes the connection on a relogin. This could wrongly set the DoNotCloseAfterTeleport | ||
3871 | // flag when no teleport had taken place (and hence no close was going to come). | ||
3872 | // if (!acd.ChildrenCapSeeds.ContainsKey(RegionInfo.RegionHandle)) | ||
3873 | // { | ||
3874 | // m_log.DebugFormat( | ||
3875 | // "[SCENE]: Setting DoNotCloseAfterTeleport for child scene presence {0} in {1} because source will attempt close.", | ||
3876 | // sp.Name, Name); | ||
3877 | // | ||
3878 | // sp.DoNotCloseAfterTeleport = true; | ||
3879 | // } | ||
3880 | // else if (EntityTransferModule.IsInTransit(sp.UUID)) | ||
3870 | 3881 | ||
3871 | sp.DoNotCloseAfterTeleport = true; | 3882 | if (EntityTransferModule.IsInTransit(sp.UUID)) |
3872 | } | ||
3873 | else if (EntityTransferModule.IsInTransit(sp.UUID)) | ||
3874 | { | 3883 | { |
3884 | sp.DoNotCloseAfterTeleport = true; | ||
3885 | |||
3875 | m_log.DebugFormat( | 3886 | m_log.DebugFormat( |
3876 | "[SCENE]: Setting DoNotCloseAfterTeleport for child scene presence {0} in {1} because this region will attempt previous end-of-teleport close.", | 3887 | "[SCENE]: Set DoNotCloseAfterTeleport for child scene presence {0} in {1} because this region will attempt end-of-teleport close from a previous close.", |
3877 | sp.Name, Name); | 3888 | sp.Name, Name); |
3878 | |||
3879 | sp.DoNotCloseAfterTeleport = true; | ||
3880 | } | 3889 | } |
3881 | } | 3890 | } |
3882 | } | 3891 | } |