Fix potential concurrency issue since the LSL notecard cache was not being checked for expiry under lock

0.7.4-extended
Justin Clark-Casey (justincc) 2013-02-28 21:19:23 +00:00
parent ff199668fe
commit f8a57edb2c
1 changed files with 9 additions and 6 deletions

View File

@ -11347,7 +11347,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
public static void Cache(UUID assetID, string text)
{
CacheCheck();
CheckCache();
lock (m_Notecards)
{
@ -11432,13 +11432,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return line;
}
public static void CacheCheck()
public static void CheckCache()
{
foreach (UUID key in new List<UUID>(m_Notecards.Keys))
lock (m_Notecards)
{
Notecard nc = m_Notecards[key];
if (nc.lastRef.AddSeconds(30) < DateTime.Now)
m_Notecards.Remove(key);
foreach (UUID key in new List<UUID>(m_Notecards.Keys))
{
Notecard nc = m_Notecards[key];
if (nc.lastRef.AddSeconds(30) < DateTime.Now)
m_Notecards.Remove(key);
}
}
}
}