For built-in groups, if a delegate throws an exception (e.g. due to network failure), always remove its request from the m_ActiveRequests list.
If this is not done, all subsequent calls for the same data see that a request is apparantly already in progress and so wait for the result indefinitely.inv-download
parent
6834393821
commit
765fd02418
|
@ -145,14 +145,20 @@ namespace OpenSim.Groups
|
||||||
|
|
||||||
if (firstCall)
|
if (firstCall)
|
||||||
{
|
{
|
||||||
//group = m_GroupsService.GetGroupRecord(RequestingAgentID, GroupID, GroupName);
|
try
|
||||||
group = d();
|
{
|
||||||
|
//group = m_GroupsService.GetGroupRecord(RequestingAgentID, GroupID, GroupName);
|
||||||
lock (m_Cache)
|
group = d();
|
||||||
|
|
||||||
|
lock (m_Cache)
|
||||||
|
{
|
||||||
|
m_Cache.AddOrUpdate(cacheKey, group, GROUPS_CACHE_TIMEOUT);
|
||||||
|
return (ExtendedGroupRecord)group;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
{
|
{
|
||||||
m_Cache.AddOrUpdate(cacheKey, group, GROUPS_CACHE_TIMEOUT);
|
|
||||||
m_ActiveRequests.Remove(cacheKey);
|
m_ActiveRequests.Remove(cacheKey);
|
||||||
return (ExtendedGroupRecord)group;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -244,13 +250,19 @@ namespace OpenSim.Groups
|
||||||
|
|
||||||
if (firstCall)
|
if (firstCall)
|
||||||
{
|
{
|
||||||
membership = d();
|
try
|
||||||
|
{
|
||||||
lock (m_Cache)
|
membership = d();
|
||||||
|
|
||||||
|
lock (m_Cache)
|
||||||
|
{
|
||||||
|
m_Cache.AddOrUpdate(cacheKey, membership, GROUPS_CACHE_TIMEOUT);
|
||||||
|
return (ExtendedGroupMembershipData)membership;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
{
|
{
|
||||||
m_Cache.AddOrUpdate(cacheKey, membership, GROUPS_CACHE_TIMEOUT);
|
|
||||||
m_ActiveRequests.Remove(cacheKey);
|
m_ActiveRequests.Remove(cacheKey);
|
||||||
return (ExtendedGroupMembershipData)membership;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -287,12 +299,18 @@ namespace OpenSim.Groups
|
||||||
|
|
||||||
if (firstCall)
|
if (firstCall)
|
||||||
{
|
{
|
||||||
membership = d();
|
try
|
||||||
lock (m_Cache)
|
{
|
||||||
|
membership = d();
|
||||||
|
lock (m_Cache)
|
||||||
|
{
|
||||||
|
m_Cache.AddOrUpdate(cacheKey, membership, GROUPS_CACHE_TIMEOUT);
|
||||||
|
return (ExtendedGroupMembershipData)membership;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
{
|
{
|
||||||
m_Cache.AddOrUpdate(cacheKey, membership, GROUPS_CACHE_TIMEOUT);
|
|
||||||
m_ActiveRequests.Remove(cacheKey);
|
m_ActiveRequests.Remove(cacheKey);
|
||||||
return (ExtendedGroupMembershipData)membership;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -328,12 +346,18 @@ namespace OpenSim.Groups
|
||||||
|
|
||||||
if (firstCall)
|
if (firstCall)
|
||||||
{
|
{
|
||||||
memberships = d();
|
try
|
||||||
lock (m_Cache)
|
{
|
||||||
|
memberships = d();
|
||||||
|
lock (m_Cache)
|
||||||
|
{
|
||||||
|
m_Cache.AddOrUpdate(cacheKey, memberships, GROUPS_CACHE_TIMEOUT);
|
||||||
|
return (List<GroupMembershipData>)memberships;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
{
|
{
|
||||||
m_Cache.AddOrUpdate(cacheKey, memberships, GROUPS_CACHE_TIMEOUT);
|
|
||||||
m_ActiveRequests.Remove(cacheKey);
|
m_ActiveRequests.Remove(cacheKey);
|
||||||
return (List<GroupMembershipData>)memberships;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -370,20 +394,26 @@ namespace OpenSim.Groups
|
||||||
|
|
||||||
if (firstCall)
|
if (firstCall)
|
||||||
{
|
{
|
||||||
List<ExtendedGroupMembersData> _members = d();
|
try
|
||||||
|
|
||||||
if (_members != null && _members.Count > 0)
|
|
||||||
members = _members.ConvertAll<GroupMembersData>(new Converter<ExtendedGroupMembersData, GroupMembersData>(m_ForeignImporter.ConvertGroupMembersData));
|
|
||||||
else
|
|
||||||
members = new List<GroupMembersData>();
|
|
||||||
|
|
||||||
lock (m_Cache)
|
|
||||||
{
|
{
|
||||||
//m_Cache.AddOrUpdate(cacheKey, members, GROUPS_CACHE_TIMEOUT);
|
List<ExtendedGroupMembersData> _members = d();
|
||||||
m_Cache.AddOrUpdate(cacheKey, _members, GROUPS_CACHE_TIMEOUT);
|
|
||||||
m_ActiveRequests.Remove(cacheKey);
|
|
||||||
|
|
||||||
return (List<GroupMembersData>)members;
|
if (_members != null && _members.Count > 0)
|
||||||
|
members = _members.ConvertAll<GroupMembersData>(new Converter<ExtendedGroupMembersData, GroupMembersData>(m_ForeignImporter.ConvertGroupMembersData));
|
||||||
|
else
|
||||||
|
members = new List<GroupMembersData>();
|
||||||
|
|
||||||
|
lock (m_Cache)
|
||||||
|
{
|
||||||
|
//m_Cache.AddOrUpdate(cacheKey, members, GROUPS_CACHE_TIMEOUT);
|
||||||
|
m_Cache.AddOrUpdate(cacheKey, _members, GROUPS_CACHE_TIMEOUT);
|
||||||
|
|
||||||
|
return (List<GroupMembersData>)members;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
m_ActiveRequests.Remove(cacheKey);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -498,16 +528,22 @@ namespace OpenSim.Groups
|
||||||
|
|
||||||
if (firstCall)
|
if (firstCall)
|
||||||
{
|
{
|
||||||
roles = d();
|
try
|
||||||
if (roles != null)
|
|
||||||
{
|
{
|
||||||
lock (m_Cache)
|
roles = d();
|
||||||
|
if (roles != null)
|
||||||
{
|
{
|
||||||
m_Cache.AddOrUpdate(cacheKey, roles, GROUPS_CACHE_TIMEOUT);
|
lock (m_Cache)
|
||||||
m_ActiveRequests.Remove(cacheKey);
|
{
|
||||||
return (List<GroupRolesData>)roles;
|
m_Cache.AddOrUpdate(cacheKey, roles, GROUPS_CACHE_TIMEOUT);
|
||||||
|
return (List<GroupRolesData>)roles;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
m_ActiveRequests.Remove(cacheKey);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Thread.Sleep(50);
|
Thread.Sleep(50);
|
||||||
|
@ -542,23 +578,29 @@ namespace OpenSim.Groups
|
||||||
|
|
||||||
if (firstCall)
|
if (firstCall)
|
||||||
{
|
{
|
||||||
List<ExtendedGroupRoleMembersData> _rmembers = d();
|
try
|
||||||
|
{
|
||||||
if (_rmembers != null && _rmembers.Count > 0)
|
List<ExtendedGroupRoleMembersData> _rmembers = d();
|
||||||
rmembers = _rmembers.ConvertAll<GroupRoleMembersData>(new Converter<ExtendedGroupRoleMembersData, GroupRoleMembersData>(m_ForeignImporter.ConvertGroupRoleMembersData));
|
|
||||||
else
|
if (_rmembers != null && _rmembers.Count > 0)
|
||||||
rmembers = new List<GroupRoleMembersData>();
|
rmembers = _rmembers.ConvertAll<GroupRoleMembersData>(new Converter<ExtendedGroupRoleMembersData, GroupRoleMembersData>(m_ForeignImporter.ConvertGroupRoleMembersData));
|
||||||
|
else
|
||||||
lock (m_Cache)
|
rmembers = new List<GroupRoleMembersData>();
|
||||||
|
|
||||||
|
lock (m_Cache)
|
||||||
|
{
|
||||||
|
// For some strange reason, when I cache the list of GroupRoleMembersData,
|
||||||
|
// it gets emptied out. The TryGet gets an empty list...
|
||||||
|
//m_Cache.AddOrUpdate(cacheKey, rmembers, GROUPS_CACHE_TIMEOUT);
|
||||||
|
// Caching the list of ExtendedGroupRoleMembersData doesn't show that issue
|
||||||
|
// I don't get it.
|
||||||
|
m_Cache.AddOrUpdate(cacheKey, _rmembers, GROUPS_CACHE_TIMEOUT);
|
||||||
|
return (List<GroupRoleMembersData>)rmembers;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
{
|
{
|
||||||
// For some strange reason, when I cache the list of GroupRoleMembersData,
|
|
||||||
// it gets emptied out. The TryGet gets an empty list...
|
|
||||||
//m_Cache.AddOrUpdate(cacheKey, rmembers, GROUPS_CACHE_TIMEOUT);
|
|
||||||
// Caching the list of ExtendedGroupRoleMembersData doesn't show that issue
|
|
||||||
// I don't get it.
|
|
||||||
m_Cache.AddOrUpdate(cacheKey, _rmembers, GROUPS_CACHE_TIMEOUT);
|
|
||||||
m_ActiveRequests.Remove(cacheKey);
|
m_ActiveRequests.Remove(cacheKey);
|
||||||
return (List<GroupRoleMembersData>)rmembers;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -667,12 +709,19 @@ namespace OpenSim.Groups
|
||||||
|
|
||||||
if (firstCall)
|
if (firstCall)
|
||||||
{
|
{
|
||||||
roles = d();
|
try
|
||||||
lock (m_Cache)
|
{
|
||||||
|
roles = d();
|
||||||
|
lock (m_Cache)
|
||||||
|
{
|
||||||
|
m_Cache.AddOrUpdate(cacheKey, roles, GROUPS_CACHE_TIMEOUT);
|
||||||
|
m_ActiveRequests.Remove(cacheKey);
|
||||||
|
return (List<GroupRolesData>)roles;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
{
|
{
|
||||||
m_Cache.AddOrUpdate(cacheKey, roles, GROUPS_CACHE_TIMEOUT);
|
|
||||||
m_ActiveRequests.Remove(cacheKey);
|
m_ActiveRequests.Remove(cacheKey);
|
||||||
return (List<GroupRolesData>)roles;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -768,13 +817,19 @@ namespace OpenSim.Groups
|
||||||
|
|
||||||
if (firstCall)
|
if (firstCall)
|
||||||
{
|
{
|
||||||
GroupNoticeInfo _notice = d();
|
try
|
||||||
|
{
|
||||||
lock (m_Cache)
|
GroupNoticeInfo _notice = d();
|
||||||
|
|
||||||
|
lock (m_Cache)
|
||||||
|
{
|
||||||
|
m_Cache.AddOrUpdate(cacheKey, _notice, GROUPS_CACHE_TIMEOUT);
|
||||||
|
return _notice;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
{
|
{
|
||||||
m_Cache.AddOrUpdate(cacheKey, _notice, GROUPS_CACHE_TIMEOUT);
|
|
||||||
m_ActiveRequests.Remove(cacheKey);
|
m_ActiveRequests.Remove(cacheKey);
|
||||||
return _notice;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -810,20 +865,24 @@ namespace OpenSim.Groups
|
||||||
|
|
||||||
if (firstCall)
|
if (firstCall)
|
||||||
{
|
{
|
||||||
notices = d();
|
try
|
||||||
|
{
|
||||||
lock (m_Cache)
|
notices = d();
|
||||||
|
|
||||||
|
lock (m_Cache)
|
||||||
|
{
|
||||||
|
m_Cache.AddOrUpdate(cacheKey, notices, GROUPS_CACHE_TIMEOUT);
|
||||||
|
return (List<ExtendedGroupNoticeData>)notices;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
{
|
{
|
||||||
m_Cache.AddOrUpdate(cacheKey, notices, GROUPS_CACHE_TIMEOUT);
|
|
||||||
m_ActiveRequests.Remove(cacheKey);
|
m_ActiveRequests.Remove(cacheKey);
|
||||||
return (List<ExtendedGroupNoticeData>)notices;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Thread.Sleep(50);
|
Thread.Sleep(50);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue