From e6c0267def09280761a6f2cbc668b2d0ad7f2753 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Fri, 27 Sep 2013 19:14:21 +0100 Subject: refactor: rename Scene.IncomingCloseAgent() to CloseAgent() in order to make it clear that all non-clientstack callers should be using this rather than RemoveClient() in order to step through the ScenePresence state machine properly. Adds IScene.CloseAgent() to replace RemoveClient() --- OpenSim/Region/Framework/Scenes/Scene.cs | 26 +++++++++++----------- OpenSim/Region/Framework/Scenes/SceneBase.cs | 14 +----------- .../Scenes/Tests/ScenePresenceAgentTests.cs | 4 ++-- .../Scenes/Tests/ScenePresenceCapabilityTests.cs | 2 +- 4 files changed, 17 insertions(+), 29 deletions(-) (limited to 'OpenSim/Region/Framework/Scenes') diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 3dc509b..82abfe9 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -1313,7 +1313,7 @@ namespace OpenSim.Region.Framework.Scenes Thread.Sleep(500); // Stop all client threads. - ForEachScenePresence(delegate(ScenePresence avatar) { IncomingCloseAgent(avatar.UUID, false); }); + ForEachScenePresence(delegate(ScenePresence avatar) { CloseAgent(avatar.UUID, false); }); m_log.Debug("[SCENE]: Persisting changed objects"); EventManager.TriggerSceneShuttingDown(this); @@ -2976,7 +2976,7 @@ namespace OpenSim.Region.Framework.Scenes { PresenceService.LogoutAgent(sp.ControllingClient.SessionId); - IncomingCloseAgent(sp.UUID, false); + CloseAgent(sp.UUID, false); } else { @@ -3398,7 +3398,7 @@ namespace OpenSim.Region.Framework.Scenes /// /// Close the neighbour child agents associated with this client. /// - public override void RemoveClient(UUID agentID, bool closeChildAgents) + public void RemoveClient(UUID agentID, bool closeChildAgents) { AgentCircuitData acd = m_authenticateHandler.GetAgentCircuitData(agentID); @@ -3783,7 +3783,7 @@ namespace OpenSim.Region.Framework.Scenes sp.Name, sp.UUID, RegionInfo.RegionName); if (sp.ControllingClient != null) - IncomingCloseAgent(sp.UUID, true); + CloseAgent(sp.UUID, true); sp = null; } @@ -4424,7 +4424,7 @@ namespace OpenSim.Region.Framework.Scenes /// /// /// - public bool IncomingCloseAgent(UUID agentID, bool force, string auth_token) + public bool CloseAgent(UUID agentID, bool force, string auth_token) { //m_log.DebugFormat("[SCENE]: Processing incoming close agent {0} in region {1} with auth_token {2}", agentID, RegionInfo.RegionName, auth_token); @@ -4442,7 +4442,7 @@ namespace OpenSim.Region.Framework.Scenes if (acd.SessionID.ToString() == auth_token) { - return IncomingCloseAgent(agentID, force); + return CloseAgent(agentID, force); } else { @@ -4455,16 +4455,16 @@ namespace OpenSim.Region.Framework.Scenes } /// - /// Tell a single agent to prepare to close. + /// Tell a single client to prepare to close. /// /// - /// This should only be called if we may close the agent but there will be some delay in so doing. Meant for - /// internal use - other callers should almost certainly called IncomingCloseAgent(). + /// This should only be called if we may close the client but there will be some delay in so doing. Meant for + /// internal use - other callers should almost certainly called CloseClient(). /// /// /// true if pre-close state notification was successful. false if the agent /// was not in a state where it could transition to pre-close. - public bool IncomingPreCloseAgent(ScenePresence sp) + public bool IncomingPreCloseClient(ScenePresence sp) { lock (m_removeClientLock) { @@ -4506,7 +4506,7 @@ namespace OpenSim.Region.Framework.Scenes /// Force the agent to close even if it might be in the middle of some other operation. You do not want to /// force unless you are absolutely sure that the agent is dead and a normal close is not working. /// - public bool IncomingCloseAgent(UUID agentID, bool force) + public override bool CloseAgent(UUID agentID, bool force) { ScenePresence sp; @@ -4517,7 +4517,7 @@ namespace OpenSim.Region.Framework.Scenes if (sp == null) { m_log.DebugFormat( - "[SCENE]: Called IncomingCloseAgent() with agent ID {0} but no such presence is in {1}", + "[SCENE]: Called CloseClient() with agent ID {0} but no such presence is in {1}", agentID, Name); return false; @@ -4526,7 +4526,7 @@ namespace OpenSim.Region.Framework.Scenes if (sp.LifecycleState != ScenePresenceState.Running && sp.LifecycleState != ScenePresenceState.PreRemove) { m_log.DebugFormat( - "[SCENE]: Called IncomingCloseAgent() for {0} in {1} but presence is already in state {2}", + "[SCENE]: Called CloseClient() for {0} in {1} but presence is already in state {2}", sp.Name, Name, sp.LifecycleState); return false; diff --git a/OpenSim/Region/Framework/Scenes/SceneBase.cs b/OpenSim/Region/Framework/Scenes/SceneBase.cs index 5252b96..4b37983 100644 --- a/OpenSim/Region/Framework/Scenes/SceneBase.cs +++ b/OpenSim/Region/Framework/Scenes/SceneBase.cs @@ -218,19 +218,7 @@ namespace OpenSim.Region.Framework.Scenes public abstract ISceneAgent AddNewClient(IClientAPI client, PresenceType type); - /// - /// Remove the given client from the scene. - /// - /// - /// Only clientstack code should call this directly. All other code should call IncomingCloseAgent() instead - /// to properly operate the state machine and avoid race conditions with other close requests (such as directly - /// from viewers). - /// - /// ID of agent to close - /// - /// Close the neighbour child agents associated with this client. - /// - public abstract void RemoveClient(UUID agentID, bool closeChildAgents); + public abstract bool CloseAgent(UUID agentID, bool force); public bool TryGetScenePresence(UUID agentID, out object scenePresence) { diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs index bbe34d2..e25bcb7 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs @@ -146,7 +146,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests } [Test] - public void TestCloseAgent() + public void TestCloseClient() { TestHelpers.InMethod(); // TestHelpers.EnableLogging(); @@ -154,7 +154,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests TestScene scene = new SceneHelpers().SetupScene(); ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1)); - scene.IncomingCloseAgent(sp.UUID, false); + scene.CloseAgent(sp.UUID, false); Assert.That(scene.GetScenePresence(sp.UUID), Is.Null); Assert.That(scene.AuthenticateHandler.GetAgentCircuitData(sp.UUID), Is.Null); diff --git a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCapabilityTests.cs b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCapabilityTests.cs index b6fb730..4fdfc74 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCapabilityTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCapabilityTests.cs @@ -79,7 +79,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests // TODO: Need to add tests for other ICapabiltiesModule methods. - scene.IncomingCloseAgent(sp.UUID, false); + scene.CloseAgent(sp.UUID, false); Assert.That(capsMod.GetCapsForUser(spUuid), Is.Null); // TODO: Need to add tests for other ICapabiltiesModule methods. -- cgit v1.1