aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs5
-rw-r--r--OpenSim/Region/Framework/Scenes/EventManager.cs13
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs3
3 files changed, 16 insertions, 5 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
index 21640cf..c266fe5 100644
--- a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
@@ -29,6 +29,7 @@ using System;
29using System.Collections; 29using System.Collections;
30using System.Collections.Generic; 30using System.Collections.Generic;
31using System.Reflection; 31using System.Reflection;
32using System.Threading;
32using log4net; 33using log4net;
33using Nini.Config; 34using Nini.Config;
34using Nwc.XmlRpc; 35using Nwc.XmlRpc;
@@ -856,7 +857,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
856 IClientAPI friendClient = LocateClientObject(friendID); 857 IClientAPI friendClient = LocateClientObject(friendID);
857 if (friendClient != null) 858 if (friendClient != null)
858 { 859 {
859 // the friend in this sim as root agent 860 // the friend in this sim as root agent
860 if (online) 861 if (online)
861 friendClient.SendAgentOnline(new UUID[] { userID }); 862 friendClient.SendAgentOnline(new UUID[] { userID });
862 else 863 else
@@ -913,6 +914,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
913 914
914 private void RecacheFriends(IClientAPI client) 915 private void RecacheFriends(IClientAPI client)
915 { 916 {
917 // FIXME: Ideally, we want to avoid doing this here since it sits the EventManager.OnMakeRootAgent event
918 // is on the critical path for transferring an avatar from one region to another.
916 UUID agentID = client.AgentId; 919 UUID agentID = client.AgentId;
917 lock (m_Friends) 920 lock (m_Friends)
918 { 921 {
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index bf9ad65..4906665 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -212,10 +212,15 @@ namespace OpenSim.Region.Framework.Scenes
212 public delegate void OnMakeChildAgentDelegate(ScenePresence presence); 212 public delegate void OnMakeChildAgentDelegate(ScenePresence presence);
213 public event OnMakeChildAgentDelegate OnMakeChildAgent; 213 public event OnMakeChildAgentDelegate OnMakeChildAgent;
214 214
215 public delegate void OnMakeRootAgentDelegate(ScenePresence presence);
216 public delegate void OnSaveNewWindlightProfileDelegate(); 215 public delegate void OnSaveNewWindlightProfileDelegate();
217 public delegate void OnSendNewWindlightProfileTargetedDelegate(RegionLightShareData wl, UUID user); 216 public delegate void OnSendNewWindlightProfileTargetedDelegate(RegionLightShareData wl, UUID user);
218 public event OnMakeRootAgentDelegate OnMakeRootAgent; 217
218 /// <summary>
219 /// This event is on the critical path for transferring an avatar from one region to another. Try and do
220 /// as little work on this event as possible, or do work asynchronously.
221 /// </summary>
222 public event Action<ScenePresence> OnMakeRootAgent;
223
219 public event OnSendNewWindlightProfileTargetedDelegate OnSendNewWindlightProfileTargeted; 224 public event OnSendNewWindlightProfileTargetedDelegate OnSendNewWindlightProfileTargeted;
220 public event OnSaveNewWindlightProfileDelegate OnSaveNewWindlightProfile; 225 public event OnSaveNewWindlightProfileDelegate OnSaveNewWindlightProfile;
221 226
@@ -1322,10 +1327,10 @@ namespace OpenSim.Region.Framework.Scenes
1322 1327
1323 public void TriggerOnMakeRootAgent(ScenePresence presence) 1328 public void TriggerOnMakeRootAgent(ScenePresence presence)
1324 { 1329 {
1325 OnMakeRootAgentDelegate handlerMakeRootAgent = OnMakeRootAgent; 1330 Action<ScenePresence> handlerMakeRootAgent = OnMakeRootAgent;
1326 if (handlerMakeRootAgent != null) 1331 if (handlerMakeRootAgent != null)
1327 { 1332 {
1328 foreach (OnMakeRootAgentDelegate d in handlerMakeRootAgent.GetInvocationList()) 1333 foreach (Action<ScenePresence> d in handlerMakeRootAgent.GetInvocationList())
1329 { 1334 {
1330 try 1335 try
1331 { 1336 {
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 189394e..5587073 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -865,6 +865,9 @@ namespace OpenSim.Region.Framework.Scenes
865 /// avatar is actual in the sim. They can perform all actions. 865 /// avatar is actual in the sim. They can perform all actions.
866 /// This change is made whenever an avatar enters a region, whether by crossing over from a neighbouring sim, 866 /// This change is made whenever an avatar enters a region, whether by crossing over from a neighbouring sim,
867 /// teleporting in or on initial login. 867 /// teleporting in or on initial login.
868 ///
869 /// This method is on the critical path for transferring an avatar from one region to another. Delay here
870 /// delays that crossing.
868 /// </summary> 871 /// </summary>
869 public void MakeRootAgent(Vector3 pos, bool isFlying) 872 public void MakeRootAgent(Vector3 pos, bool isFlying)
870 { 873 {