From 50803dfe2ca8818f438d740e788762e1faf1078c Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Tue, 15 Nov 2011 15:57:53 +0000
Subject: For clients that are entering a simulator from initial login, stop
executing FriendsModule.FetchFriendslist() asychronously.
Executing this asynchronously allows a race condition where subsequent friends fetches hit a cache that FetchFriendsList() had not yet populated.
Changing this to synchronous may improve issues where a user does not see friends as online even though they are.
I don't believe synchronous is a problem here, but if it is, then a more complicated signalling mechanism is required. Locking the cache isn't sufficient.
---
OpenSim/Region/Framework/Scenes/EventManager.cs | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
(limited to 'OpenSim/Region/Framework')
diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs
index 96da2c3..bf9ad65 100644
--- a/OpenSim/Region/Framework/Scenes/EventManager.cs
+++ b/OpenSim/Region/Framework/Scenes/EventManager.cs
@@ -73,8 +73,10 @@ namespace OpenSim.Region.Framework.Scenes
///
public event OnNewClientDelegate OnNewClient;
- public delegate void OnClientLoginDelegate(IClientAPI client);
- public event OnClientLoginDelegate OnClientLogin;
+ ///
+ /// Fired if the client entering this sim is doing so as a new login
+ ///
+ public event Action OnClientLogin;
public delegate void OnNewPresenceDelegate(ScenePresence presence);
@@ -651,10 +653,10 @@ namespace OpenSim.Region.Framework.Scenes
public void TriggerOnClientLogin(IClientAPI client)
{
- OnClientLoginDelegate handlerClientLogin = OnClientLogin;
+ Action handlerClientLogin = OnClientLogin;
if (handlerClientLogin != null)
{
- foreach (OnClientLoginDelegate d in handlerClientLogin.GetInvocationList())
+ foreach (Action d in handlerClientLogin.GetInvocationList())
{
try
{
--
cgit v1.1