mirror of
https://github.com/opensim/opensim.git
synced 2026-05-20 07:05:46 +08:00
Fix potential concurrency issue since the LSL notecard cache was not being checked for expiry under lock
This commit is contained in:
@@ -11689,7 +11689,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
|
||||
public static void Cache(UUID assetID, string text)
|
||||
{
|
||||
CacheCheck();
|
||||
CheckCache();
|
||||
|
||||
lock (m_Notecards)
|
||||
{
|
||||
@@ -11774,14 +11774,17 @@ 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user