aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2013-09-27 19:14:21 +0100
committerJustin Clark-Casey (justincc)2013-09-27 19:14:21 +0100
commitb16bc7b01ca0691758e66f85238d657f02271082 (patch)
tree4e121ace10b7dee25e1311268a84d3e95946f6f9 /OpenSim/Region/Framework/Scenes
parentminor code formatting for the sake of consistency and readability (diff)
downloadopensim-SC-b16bc7b01ca0691758e66f85238d657f02271082.zip
opensim-SC-b16bc7b01ca0691758e66f85238d657f02271082.tar.gz
opensim-SC-b16bc7b01ca0691758e66f85238d657f02271082.tar.bz2
opensim-SC-b16bc7b01ca0691758e66f85238d657f02271082.tar.xz
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()
Diffstat (limited to 'OpenSim/Region/Framework/Scenes')
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs26
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneBase.cs14
-rw-r--r--OpenSim/Region/Framework/Scenes/Tests/ScenePresenceAgentTests.cs4
-rw-r--r--OpenSim/Region/Framework/Scenes/Tests/ScenePresenceCapabilityTests.cs2
4 files changed, 17 insertions, 29 deletions
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
1313 Thread.Sleep(500); 1313 Thread.Sleep(500);
1314 1314
1315 // Stop all client threads. 1315 // Stop all client threads.
1316 ForEachScenePresence(delegate(ScenePresence avatar) { IncomingCloseAgent(avatar.UUID, false); }); 1316 ForEachScenePresence(delegate(ScenePresence avatar) { CloseAgent(avatar.UUID, false); });
1317 1317
1318 m_log.Debug("[SCENE]: Persisting changed objects"); 1318 m_log.Debug("[SCENE]: Persisting changed objects");
1319 EventManager.TriggerSceneShuttingDown(this); 1319 EventManager.TriggerSceneShuttingDown(this);
@@ -2976,7 +2976,7 @@ namespace OpenSim.Region.Framework.Scenes
2976 { 2976 {
2977 PresenceService.LogoutAgent(sp.ControllingClient.SessionId); 2977 PresenceService.LogoutAgent(sp.ControllingClient.SessionId);
2978 2978
2979 IncomingCloseAgent(sp.UUID, false); 2979 CloseAgent(sp.UUID, false);
2980 } 2980 }
2981 else 2981 else
2982 { 2982 {
@@ -3398,7 +3398,7 @@ namespace OpenSim.Region.Framework.Scenes
3398 /// <param name='closeChildAgents'> 3398 /// <param name='closeChildAgents'>
3399 /// Close the neighbour child agents associated with this client. 3399 /// Close the neighbour child agents associated with this client.
3400 /// </param> 3400 /// </param>
3401 public override void RemoveClient(UUID agentID, bool closeChildAgents) 3401 public void RemoveClient(UUID agentID, bool closeChildAgents)
3402 { 3402 {
3403 AgentCircuitData acd = m_authenticateHandler.GetAgentCircuitData(agentID); 3403 AgentCircuitData acd = m_authenticateHandler.GetAgentCircuitData(agentID);
3404 3404
@@ -3783,7 +3783,7 @@ namespace OpenSim.Region.Framework.Scenes
3783 sp.Name, sp.UUID, RegionInfo.RegionName); 3783 sp.Name, sp.UUID, RegionInfo.RegionName);
3784 3784
3785 if (sp.ControllingClient != null) 3785 if (sp.ControllingClient != null)
3786 IncomingCloseAgent(sp.UUID, true); 3786 CloseAgent(sp.UUID, true);
3787 3787
3788 sp = null; 3788 sp = null;
3789 } 3789 }
@@ -4424,7 +4424,7 @@ namespace OpenSim.Region.Framework.Scenes
4424 /// <param name="force"></param> 4424 /// <param name="force"></param>
4425 /// <param name="auth_token"></param> 4425 /// <param name="auth_token"></param>
4426 /// <returns></returns> 4426 /// <returns></returns>
4427 public bool IncomingCloseAgent(UUID agentID, bool force, string auth_token) 4427 public bool CloseAgent(UUID agentID, bool force, string auth_token)
4428 { 4428 {
4429 //m_log.DebugFormat("[SCENE]: Processing incoming close agent {0} in region {1} with auth_token {2}", agentID, RegionInfo.RegionName, auth_token); 4429 //m_log.DebugFormat("[SCENE]: Processing incoming close agent {0} in region {1} with auth_token {2}", agentID, RegionInfo.RegionName, auth_token);
4430 4430
@@ -4442,7 +4442,7 @@ namespace OpenSim.Region.Framework.Scenes
4442 4442
4443 if (acd.SessionID.ToString() == auth_token) 4443 if (acd.SessionID.ToString() == auth_token)
4444 { 4444 {
4445 return IncomingCloseAgent(agentID, force); 4445 return CloseAgent(agentID, force);
4446 } 4446 }
4447 else 4447 else
4448 { 4448 {
@@ -4455,16 +4455,16 @@ namespace OpenSim.Region.Framework.Scenes
4455 } 4455 }
4456 4456
4457 /// <summary> 4457 /// <summary>
4458 /// Tell a single agent to prepare to close. 4458 /// Tell a single client to prepare to close.
4459 /// </summary> 4459 /// </summary>
4460 /// <remarks> 4460 /// <remarks>
4461 /// This should only be called if we may close the agent but there will be some delay in so doing. Meant for 4461 /// This should only be called if we may close the client but there will be some delay in so doing. Meant for
4462 /// internal use - other callers should almost certainly called IncomingCloseAgent(). 4462 /// internal use - other callers should almost certainly called CloseClient().
4463 /// </remarks> 4463 /// </remarks>
4464 /// <param name="sp"></param> 4464 /// <param name="sp"></param>
4465 /// <returns>true if pre-close state notification was successful. false if the agent 4465 /// <returns>true if pre-close state notification was successful. false if the agent
4466 /// was not in a state where it could transition to pre-close.</returns> 4466 /// was not in a state where it could transition to pre-close.</returns>
4467 public bool IncomingPreCloseAgent(ScenePresence sp) 4467 public bool IncomingPreCloseClient(ScenePresence sp)
4468 { 4468 {
4469 lock (m_removeClientLock) 4469 lock (m_removeClientLock)
4470 { 4470 {
@@ -4506,7 +4506,7 @@ namespace OpenSim.Region.Framework.Scenes
4506 /// Force the agent to close even if it might be in the middle of some other operation. You do not want to 4506 /// Force the agent to close even if it might be in the middle of some other operation. You do not want to
4507 /// force unless you are absolutely sure that the agent is dead and a normal close is not working. 4507 /// force unless you are absolutely sure that the agent is dead and a normal close is not working.
4508 /// </param> 4508 /// </param>
4509 public bool IncomingCloseAgent(UUID agentID, bool force) 4509 public override bool CloseAgent(UUID agentID, bool force)
4510 { 4510 {
4511 ScenePresence sp; 4511 ScenePresence sp;
4512 4512
@@ -4517,7 +4517,7 @@ namespace OpenSim.Region.Framework.Scenes
4517 if (sp == null) 4517 if (sp == null)
4518 { 4518 {
4519 m_log.DebugFormat( 4519 m_log.DebugFormat(
4520 "[SCENE]: Called IncomingCloseAgent() with agent ID {0} but no such presence is in {1}", 4520 "[SCENE]: Called CloseClient() with agent ID {0} but no such presence is in {1}",
4521 agentID, Name); 4521 agentID, Name);
4522 4522
4523 return false; 4523 return false;
@@ -4526,7 +4526,7 @@ namespace OpenSim.Region.Framework.Scenes
4526 if (sp.LifecycleState != ScenePresenceState.Running && sp.LifecycleState != ScenePresenceState.PreRemove) 4526 if (sp.LifecycleState != ScenePresenceState.Running && sp.LifecycleState != ScenePresenceState.PreRemove)
4527 { 4527 {
4528 m_log.DebugFormat( 4528 m_log.DebugFormat(
4529 "[SCENE]: Called IncomingCloseAgent() for {0} in {1} but presence is already in state {2}", 4529 "[SCENE]: Called CloseClient() for {0} in {1} but presence is already in state {2}",
4530 sp.Name, Name, sp.LifecycleState); 4530 sp.Name, Name, sp.LifecycleState);
4531 4531
4532 return false; 4532 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
218 218
219 public abstract ISceneAgent AddNewClient(IClientAPI client, PresenceType type); 219 public abstract ISceneAgent AddNewClient(IClientAPI client, PresenceType type);
220 220
221 /// <summary> 221 public abstract bool CloseAgent(UUID agentID, bool force);
222 /// Remove the given client from the scene.
223 /// </summary>
224 /// <remarks>
225 /// Only clientstack code should call this directly. All other code should call IncomingCloseAgent() instead
226 /// to properly operate the state machine and avoid race conditions with other close requests (such as directly
227 /// from viewers).
228 /// </remarks>
229 /// <param name='agentID'>ID of agent to close</param>
230 /// <param name='closeChildAgents'>
231 /// Close the neighbour child agents associated with this client.
232 /// </param>
233 public abstract void RemoveClient(UUID agentID, bool closeChildAgents);
234 222
235 public bool TryGetScenePresence(UUID agentID, out object scenePresence) 223 public bool TryGetScenePresence(UUID agentID, out object scenePresence)
236 { 224 {
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
146 } 146 }
147 147
148 [Test] 148 [Test]
149 public void TestCloseAgent() 149 public void TestCloseClient()
150 { 150 {
151 TestHelpers.InMethod(); 151 TestHelpers.InMethod();
152// TestHelpers.EnableLogging(); 152// TestHelpers.EnableLogging();
@@ -154,7 +154,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
154 TestScene scene = new SceneHelpers().SetupScene(); 154 TestScene scene = new SceneHelpers().SetupScene();
155 ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1)); 155 ScenePresence sp = SceneHelpers.AddScenePresence(scene, TestHelpers.ParseTail(0x1));
156 156
157 scene.IncomingCloseAgent(sp.UUID, false); 157 scene.CloseAgent(sp.UUID, false);
158 158
159 Assert.That(scene.GetScenePresence(sp.UUID), Is.Null); 159 Assert.That(scene.GetScenePresence(sp.UUID), Is.Null);
160 Assert.That(scene.AuthenticateHandler.GetAgentCircuitData(sp.UUID), Is.Null); 160 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
79 79
80 // TODO: Need to add tests for other ICapabiltiesModule methods. 80 // TODO: Need to add tests for other ICapabiltiesModule methods.
81 81
82 scene.IncomingCloseAgent(sp.UUID, false); 82 scene.CloseAgent(sp.UUID, false);
83 Assert.That(capsMod.GetCapsForUser(spUuid), Is.Null); 83 Assert.That(capsMod.GetCapsForUser(spUuid), Is.Null);
84 84
85 // TODO: Need to add tests for other ICapabiltiesModule methods. 85 // TODO: Need to add tests for other ICapabiltiesModule methods.