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
|
@ -144,6 +144,8 @@ namespace OpenSim.Groups
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firstCall)
|
if (firstCall)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
//group = m_GroupsService.GetGroupRecord(RequestingAgentID, GroupID, GroupName);
|
//group = m_GroupsService.GetGroupRecord(RequestingAgentID, GroupID, GroupName);
|
||||||
group = d();
|
group = d();
|
||||||
|
@ -151,10 +153,14 @@ namespace OpenSim.Groups
|
||||||
lock (m_Cache)
|
lock (m_Cache)
|
||||||
{
|
{
|
||||||
m_Cache.AddOrUpdate(cacheKey, group, GROUPS_CACHE_TIMEOUT);
|
m_Cache.AddOrUpdate(cacheKey, group, GROUPS_CACHE_TIMEOUT);
|
||||||
m_ActiveRequests.Remove(cacheKey);
|
|
||||||
return (ExtendedGroupRecord)group;
|
return (ExtendedGroupRecord)group;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
m_ActiveRequests.Remove(cacheKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
Thread.Sleep(50);
|
Thread.Sleep(50);
|
||||||
}
|
}
|
||||||
|
@ -243,16 +249,22 @@ namespace OpenSim.Groups
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firstCall)
|
if (firstCall)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
membership = d();
|
membership = d();
|
||||||
|
|
||||||
lock (m_Cache)
|
lock (m_Cache)
|
||||||
{
|
{
|
||||||
m_Cache.AddOrUpdate(cacheKey, membership, GROUPS_CACHE_TIMEOUT);
|
m_Cache.AddOrUpdate(cacheKey, membership, GROUPS_CACHE_TIMEOUT);
|
||||||
m_ActiveRequests.Remove(cacheKey);
|
|
||||||
return (ExtendedGroupMembershipData)membership;
|
return (ExtendedGroupMembershipData)membership;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
m_ActiveRequests.Remove(cacheKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
Thread.Sleep(50);
|
Thread.Sleep(50);
|
||||||
}
|
}
|
||||||
|
@ -286,15 +298,21 @@ namespace OpenSim.Groups
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firstCall)
|
if (firstCall)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
membership = d();
|
membership = d();
|
||||||
lock (m_Cache)
|
lock (m_Cache)
|
||||||
{
|
{
|
||||||
m_Cache.AddOrUpdate(cacheKey, membership, GROUPS_CACHE_TIMEOUT);
|
m_Cache.AddOrUpdate(cacheKey, membership, GROUPS_CACHE_TIMEOUT);
|
||||||
m_ActiveRequests.Remove(cacheKey);
|
|
||||||
return (ExtendedGroupMembershipData)membership;
|
return (ExtendedGroupMembershipData)membership;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
m_ActiveRequests.Remove(cacheKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
Thread.Sleep(50);
|
Thread.Sleep(50);
|
||||||
}
|
}
|
||||||
|
@ -327,15 +345,21 @@ namespace OpenSim.Groups
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firstCall)
|
if (firstCall)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
memberships = d();
|
memberships = d();
|
||||||
lock (m_Cache)
|
lock (m_Cache)
|
||||||
{
|
{
|
||||||
m_Cache.AddOrUpdate(cacheKey, memberships, GROUPS_CACHE_TIMEOUT);
|
m_Cache.AddOrUpdate(cacheKey, memberships, GROUPS_CACHE_TIMEOUT);
|
||||||
m_ActiveRequests.Remove(cacheKey);
|
|
||||||
return (List<GroupMembershipData>)memberships;
|
return (List<GroupMembershipData>)memberships;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
m_ActiveRequests.Remove(cacheKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
Thread.Sleep(50);
|
Thread.Sleep(50);
|
||||||
}
|
}
|
||||||
|
@ -369,6 +393,8 @@ namespace OpenSim.Groups
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firstCall)
|
if (firstCall)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
List<ExtendedGroupMembersData> _members = d();
|
List<ExtendedGroupMembersData> _members = d();
|
||||||
|
|
||||||
|
@ -381,11 +407,15 @@ namespace OpenSim.Groups
|
||||||
{
|
{
|
||||||
//m_Cache.AddOrUpdate(cacheKey, members, GROUPS_CACHE_TIMEOUT);
|
//m_Cache.AddOrUpdate(cacheKey, members, GROUPS_CACHE_TIMEOUT);
|
||||||
m_Cache.AddOrUpdate(cacheKey, _members, GROUPS_CACHE_TIMEOUT);
|
m_Cache.AddOrUpdate(cacheKey, _members, GROUPS_CACHE_TIMEOUT);
|
||||||
m_ActiveRequests.Remove(cacheKey);
|
|
||||||
|
|
||||||
return (List<GroupMembersData>)members;
|
return (List<GroupMembersData>)members;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
m_ActiveRequests.Remove(cacheKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
Thread.Sleep(50);
|
Thread.Sleep(50);
|
||||||
}
|
}
|
||||||
|
@ -497,6 +527,8 @@ namespace OpenSim.Groups
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firstCall)
|
if (firstCall)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
roles = d();
|
roles = d();
|
||||||
if (roles != null)
|
if (roles != null)
|
||||||
|
@ -504,11 +536,15 @@ namespace OpenSim.Groups
|
||||||
lock (m_Cache)
|
lock (m_Cache)
|
||||||
{
|
{
|
||||||
m_Cache.AddOrUpdate(cacheKey, roles, GROUPS_CACHE_TIMEOUT);
|
m_Cache.AddOrUpdate(cacheKey, roles, GROUPS_CACHE_TIMEOUT);
|
||||||
m_ActiveRequests.Remove(cacheKey);
|
|
||||||
return (List<GroupRolesData>)roles;
|
return (List<GroupRolesData>)roles;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
m_ActiveRequests.Remove(cacheKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
Thread.Sleep(50);
|
Thread.Sleep(50);
|
||||||
}
|
}
|
||||||
|
@ -541,6 +577,8 @@ namespace OpenSim.Groups
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firstCall)
|
if (firstCall)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
List<ExtendedGroupRoleMembersData> _rmembers = d();
|
List<ExtendedGroupRoleMembersData> _rmembers = d();
|
||||||
|
|
||||||
|
@ -557,10 +595,14 @@ namespace OpenSim.Groups
|
||||||
// Caching the list of ExtendedGroupRoleMembersData doesn't show that issue
|
// Caching the list of ExtendedGroupRoleMembersData doesn't show that issue
|
||||||
// I don't get it.
|
// I don't get it.
|
||||||
m_Cache.AddOrUpdate(cacheKey, _rmembers, GROUPS_CACHE_TIMEOUT);
|
m_Cache.AddOrUpdate(cacheKey, _rmembers, GROUPS_CACHE_TIMEOUT);
|
||||||
m_ActiveRequests.Remove(cacheKey);
|
|
||||||
return (List<GroupRoleMembersData>)rmembers;
|
return (List<GroupRoleMembersData>)rmembers;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
m_ActiveRequests.Remove(cacheKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
Thread.Sleep(50);
|
Thread.Sleep(50);
|
||||||
}
|
}
|
||||||
|
@ -666,6 +708,8 @@ namespace OpenSim.Groups
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firstCall)
|
if (firstCall)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
roles = d();
|
roles = d();
|
||||||
lock (m_Cache)
|
lock (m_Cache)
|
||||||
|
@ -675,6 +719,11 @@ namespace OpenSim.Groups
|
||||||
return (List<GroupRolesData>)roles;
|
return (List<GroupRolesData>)roles;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
m_ActiveRequests.Remove(cacheKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
Thread.Sleep(50);
|
Thread.Sleep(50);
|
||||||
}
|
}
|
||||||
|
@ -767,16 +816,22 @@ namespace OpenSim.Groups
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firstCall)
|
if (firstCall)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
GroupNoticeInfo _notice = d();
|
GroupNoticeInfo _notice = d();
|
||||||
|
|
||||||
lock (m_Cache)
|
lock (m_Cache)
|
||||||
{
|
{
|
||||||
m_Cache.AddOrUpdate(cacheKey, _notice, GROUPS_CACHE_TIMEOUT);
|
m_Cache.AddOrUpdate(cacheKey, _notice, GROUPS_CACHE_TIMEOUT);
|
||||||
m_ActiveRequests.Remove(cacheKey);
|
|
||||||
return _notice;
|
return _notice;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
m_ActiveRequests.Remove(cacheKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
Thread.Sleep(50);
|
Thread.Sleep(50);
|
||||||
}
|
}
|
||||||
|
@ -809,21 +864,25 @@ namespace OpenSim.Groups
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firstCall)
|
if (firstCall)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
notices = d();
|
notices = d();
|
||||||
|
|
||||||
lock (m_Cache)
|
lock (m_Cache)
|
||||||
{
|
{
|
||||||
m_Cache.AddOrUpdate(cacheKey, notices, GROUPS_CACHE_TIMEOUT);
|
m_Cache.AddOrUpdate(cacheKey, notices, GROUPS_CACHE_TIMEOUT);
|
||||||
m_ActiveRequests.Remove(cacheKey);
|
|
||||||
return (List<ExtendedGroupNoticeData>)notices;
|
return (List<ExtendedGroupNoticeData>)notices;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
m_ActiveRequests.Remove(cacheKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
Thread.Sleep(50);
|
Thread.Sleep(50);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue