On a teleport, lock m_agentsInTransit whilst we grab the value to check for completion just to be sure we're not using a thread cached version.

0.7.4-extended
Justin Clark-Casey (justincc) 2013-03-21 00:46:08 +00:00
parent e185ed6e69
commit f57e29372b
2 changed files with 12 additions and 5 deletions

View File

@ -292,8 +292,15 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
// There should be no race condition here since no other code should be removing the agent transfer or // There should be no race condition here since no other code should be removing the agent transfer or
// changing the state to another other than Transferring => ReceivedAtDestination. // changing the state to another other than Transferring => ReceivedAtDestination.
while (m_agentsInTransit[id] != AgentTransferState.ReceivedAtDestination && count-- > 0)
while (count-- > 0)
{ {
lock (m_agentsInTransit)
{
if (m_agentsInTransit[id] == AgentTransferState.ReceivedAtDestination)
break;
}
// m_log.Debug(" >>> Waiting... " + count); // m_log.Debug(" >>> Waiting... " + count);
Thread.Sleep(100); Thread.Sleep(100);
} }

View File

@ -107,7 +107,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
} }
[Test] [Test]
public void TestSameSimulatorSeparatedRegions() public void TestSameSimulatorIsolatedRegions()
{ {
TestHelpers.InMethod(); TestHelpers.InMethod();
// TestHelpers.EnableLogging(); // TestHelpers.EnableLogging();
@ -180,7 +180,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
/// Test teleport procedures when the target simulator returns false when queried about access. /// Test teleport procedures when the target simulator returns false when queried about access.
/// </summary> /// </summary>
[Test] [Test]
public void TestSameSimulatorSeparatedRegions_DeniedOnQueryAccess() public void TestSameSimulatorIsolatedRegions_DeniedOnQueryAccess()
{ {
TestHelpers.InMethod(); TestHelpers.InMethod();
// TestHelpers.EnableLogging(); // TestHelpers.EnableLogging();
@ -264,7 +264,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
/// Test teleport procedures when the target simulator create agent step is refused. /// Test teleport procedures when the target simulator create agent step is refused.
/// </summary> /// </summary>
[Test] [Test]
public void TestSameSimulatorSeparatedRegions_DeniedOnCreateAgent() public void TestSameSimulatorIsolatedRegions_DeniedOnCreateAgent()
{ {
TestHelpers.InMethod(); TestHelpers.InMethod();
// TestHelpers.EnableLogging(); // TestHelpers.EnableLogging();
@ -345,7 +345,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests
/// (for CreateAgent) but the viewer cannot reach the destination region due to network issues. /// (for CreateAgent) but the viewer cannot reach the destination region due to network issues.
/// </remarks> /// </remarks>
[Test] [Test]
public void TestSameSimulatorSeparatedRegions_DestinationDidNotProcessViewerConnection() public void TestSameSimulatorIsolatedRegions_DestinationDidNotProcessViewerConnection()
{ {
TestHelpers.InMethod(); TestHelpers.InMethod();
// TestHelpers.EnableLogging(); // TestHelpers.EnableLogging();