* Added a lock to the user profile cache to prevent simultaneous duplicate additions to the database. (Attempting to fix bug reported by nebadon)

afrisby
Adam Frisby 2007-10-21 22:53:54 +00:00
parent 7f2ec02802
commit 4dc8e7e0f8
1 changed files with 14 additions and 10 deletions

View File

@ -59,18 +59,22 @@ namespace OpenSim.Framework.Communications.Caches
/// <param name="userID"></param>
public void AddNewUser(LLUUID userID)
{
if (!this.UserProfiles.ContainsKey(userID))
// Potential fix - Multithreading issue.
lock (UserProfiles)
{
CachedUserInfo userInfo = new CachedUserInfo(this.m_parent);
userInfo.UserProfile = this.RequestUserProfileForUser(userID);
if (userInfo.UserProfile != null)
if (!this.UserProfiles.ContainsKey(userID))
{
this.RequestInventoryForUser(userID, userInfo);
this.UserProfiles.Add(userID, userInfo);
}
else
{
System.Console.WriteLine("CACHE", "User profile for user not found");
CachedUserInfo userInfo = new CachedUserInfo(this.m_parent);
userInfo.UserProfile = this.RequestUserProfileForUser(userID);
if (userInfo.UserProfile != null)
{
this.RequestInventoryForUser(userID, userInfo);
this.UserProfiles.Add(userID, userInfo);
}
else
{
System.Console.WriteLine("CACHE", "User profile for user not found");
}
}
}
}