Fix potential concurrency issue since the LSL notecard cache was not being checked for expiry under lock
parent
ff199668fe
commit
f8a57edb2c
|
@ -11347,7 +11347,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
public static void Cache(UUID assetID, string text)
|
public static void Cache(UUID assetID, string text)
|
||||||
{
|
{
|
||||||
CacheCheck();
|
CheckCache();
|
||||||
|
|
||||||
lock (m_Notecards)
|
lock (m_Notecards)
|
||||||
{
|
{
|
||||||
|
@ -11432,13 +11432,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
return line;
|
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];
|
foreach (UUID key in new List<UUID>(m_Notecards.Keys))
|
||||||
if (nc.lastRef.AddSeconds(30) < DateTime.Now)
|
{
|
||||||
m_Notecards.Remove(key);
|
Notecard nc = m_Notecards[key];
|
||||||
|
if (nc.lastRef.AddSeconds(30) < DateTime.Now)
|
||||||
|
m_Notecards.Remove(key);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue