Lock m_classifiedCache and m_classifiedInterest dictionary reads in UserProfileModule since in the presence of writes these are not thread-safe operations.
Simplified locking to m_classifiedCache only since r/w of both dictionaries always occurs togethercpu-performance
parent
42b0c68eab
commit
e6cb7b4764
|
@ -331,18 +331,17 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles
|
||||||
|
|
||||||
classifieds[cid] = name;
|
classifieds[cid] = name;
|
||||||
|
|
||||||
|
lock (m_classifiedCache)
|
||||||
|
{
|
||||||
if (!m_classifiedCache.ContainsKey(cid))
|
if (!m_classifiedCache.ContainsKey(cid))
|
||||||
{
|
{
|
||||||
lock(m_classifiedCache)
|
|
||||||
m_classifiedCache.Add(cid,creatorId);
|
m_classifiedCache.Add(cid,creatorId);
|
||||||
|
|
||||||
lock(m_classifiedInterest)
|
|
||||||
m_classifiedInterest.Add(cid, 0);
|
m_classifiedInterest.Add(cid, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
lock(m_classifiedInterest)
|
|
||||||
m_classifiedInterest[cid]++;
|
m_classifiedInterest[cid]++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
remoteClient.SendAvatarClassifiedReply(new UUID(args[0]), classifieds);
|
remoteClient.SendAvatarClassifiedReply(new UUID(args[0]), classifieds);
|
||||||
}
|
}
|
||||||
|
@ -353,21 +352,21 @@ namespace OpenSim.Region.OptionalModules.Avatar.UserProfiles
|
||||||
UserClassifiedAdd ad = new UserClassifiedAdd();
|
UserClassifiedAdd ad = new UserClassifiedAdd();
|
||||||
ad.ClassifiedId = queryClassifiedID;
|
ad.ClassifiedId = queryClassifiedID;
|
||||||
|
|
||||||
|
lock (m_classifiedCache)
|
||||||
|
{
|
||||||
if (m_classifiedCache.ContainsKey(queryClassifiedID))
|
if (m_classifiedCache.ContainsKey(queryClassifiedID))
|
||||||
{
|
{
|
||||||
target = m_classifiedCache[queryClassifiedID];
|
target = m_classifiedCache[queryClassifiedID];
|
||||||
|
|
||||||
lock(m_classifiedInterest)
|
|
||||||
m_classifiedInterest[queryClassifiedID] --;
|
m_classifiedInterest[queryClassifiedID] --;
|
||||||
|
|
||||||
if(m_classifiedInterest[queryClassifiedID] == 0)
|
if (m_classifiedInterest[queryClassifiedID] == 0)
|
||||||
{
|
{
|
||||||
lock(m_classifiedInterest)
|
|
||||||
m_classifiedInterest.Remove(queryClassifiedID);
|
m_classifiedInterest.Remove(queryClassifiedID);
|
||||||
lock(m_classifiedCache)
|
|
||||||
m_classifiedCache.Remove(queryClassifiedID);
|
m_classifiedCache.Remove(queryClassifiedID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
string serverURI = string.Empty;
|
string serverURI = string.Empty;
|
||||||
bool foreign = GetUserProfileServerURI(target, out serverURI);
|
bool foreign = GetUserProfileServerURI(target, out serverURI);
|
||||||
|
|
Loading…
Reference in New Issue