aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
diff options
context:
space:
mode:
authorTeravus Ovares (Dan Olivares)2009-09-13 18:28:45 -0400
committerTeravus Ovares (Dan Olivares)2009-09-13 18:28:45 -0400
commited475f21eee93210f1cdfcb9a9778da91f2b1d38 (patch)
tree6d925e81ce244ebd73f933801e1cbcba5479b068 /OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
parentMerge branch 'master' of ssh://MyConnection/var/git/opensim (diff)
downloadopensim-SC-ed475f21eee93210f1cdfcb9a9778da91f2b1d38.zip
opensim-SC-ed475f21eee93210f1cdfcb9a9778da91f2b1d38.tar.gz
opensim-SC-ed475f21eee93210f1cdfcb9a9778da91f2b1d38.tar.bz2
opensim-SC-ed475f21eee93210f1cdfcb9a9778da91f2b1d38.tar.xz
* Use the BeginInvoke methodology instead of the FireAndForget methodology to try to mitigate a mono assert. Same functionality done a different way.
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs30
1 files changed, 25 insertions, 5 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
index b38148b..204c319 100644
--- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
@@ -1412,10 +1412,25 @@ namespace OpenSim.Region.Framework.Scenes
1412 d.BeginInvoke(agent, newpos, neighbourx, neighboury, isFlying, CrossAgentToNewRegionCompleted, d); 1412 d.BeginInvoke(agent, newpos, neighbourx, neighboury, isFlying, CrossAgentToNewRegionCompleted, d);
1413 } 1413 }
1414 1414
1415 public void InformClientToInitateTeleportToLocation(ScenePresence agent, uint regionX, uint regionY, Vector3 position, Scene initiatingScene) 1415 public delegate void InformClientToInitateTeleportToLocationDelegate(ScenePresence agent, uint regionX, uint regionY,
1416 Vector3 position,
1417 Scene initiatingScene);
1418
1419 public void InformClientToInitateTeleportToLocation(ScenePresence agent, uint regionX, uint regionY, Vector3 position,
1420 Scene initiatingScene)
1421 {
1422
1423 // This assumes that we know what our neighbors are.
1424
1425 InformClientToInitateTeleportToLocationDelegate d = InformClientToInitiateTeleportToLocationAsync;
1426 d.BeginInvoke(agent,regionX,regionY,position,initiatingScene,
1427 InformClientToInitiateTeleportToLocationCompleted,
1428 d);
1429 }
1430
1431 public void InformClientToInitiateTeleportToLocationAsync(ScenePresence agent, uint regionX, uint regionY, Vector3 position,
1432 Scene initiatingScene)
1416 { 1433 {
1417 Util.FireAndForget(delegate
1418 {
1419 Thread.Sleep(10000); 1434 Thread.Sleep(10000);
1420 IMessageTransferModule im = initiatingScene.RequestModuleInterface<IMessageTransferModule>(); 1435 IMessageTransferModule im = initiatingScene.RequestModuleInterface<IMessageTransferModule>();
1421 if (im != null) 1436 if (im != null)
@@ -1440,13 +1455,18 @@ namespace OpenSim.Region.Framework.Scenes
1440 }); 1455 });
1441 1456
1442 } 1457 }
1458 }
1443 1459
1444 }); 1460 private void InformClientToInitiateTeleportToLocationCompleted(IAsyncResult iar)
1461 {
1462 InformClientToInitateTeleportToLocationDelegate icon =
1463 (InformClientToInitateTeleportToLocationDelegate) iar.AsyncState;
1464 icon.EndInvoke(iar);
1445 } 1465 }
1446 1466
1447 public delegate ScenePresence CrossAgentToNewRegionDelegate(ScenePresence agent, Vector3 pos, uint neighbourx, uint neighboury, bool isFlying); 1467 public delegate ScenePresence CrossAgentToNewRegionDelegate(ScenePresence agent, Vector3 pos, uint neighbourx, uint neighboury, bool isFlying);
1448 1468
1449 /// <summary> 1469 /// <summary>
1450 /// This Closes child agents on neighboring regions 1470 /// This Closes child agents on neighboring regions
1451 /// Calls an asynchronous method to do so.. so it doesn't lag the sim. 1471 /// Calls an asynchronous method to do so.. so it doesn't lag the sim.
1452 /// </summary> 1472 /// </summary>