add GC.collect to flotsam cache expire. This is ugly but so is GC

master
UbitUmarov 2020-07-07 17:35:27 +01:00
parent e5c2bd505c
commit 28fcbc65f9
2 changed files with 29 additions and 6 deletions

View File

@ -373,10 +373,14 @@ namespace OpenSim.Region.CoreModules.Asset
File.SetLastAccessTime(filename, DateTime.Now);
return true;
}
catch
catch (FileNotFoundException)
{
return false;
}
catch
{
return true; // ignore other errors
}
}
private AssetBase GetFromWeakReference(string id)
@ -685,8 +689,10 @@ namespace OpenSim.Region.CoreModules.Asset
if(!Directory.Exists(dir))
return;
int dirSize = 0;
foreach (string file in Directory.GetFiles(dir))
{
++dirSize;
if (File.GetLastAccessTime(file) < purgeLine)
{
File.Delete(file);
@ -702,11 +708,11 @@ namespace OpenSim.Region.CoreModules.Asset
// Recurse into lower tiers
foreach (string subdir in Directory.GetDirectories(dir))
{
++dirSize;
CleanExpiredFiles(subdir, purgeLine);
}
// Check if a tier directory is empty, if so, delete it
int dirSize = Directory.GetFiles(dir).Length + Directory.GetDirectories(dir).Length;
if (dirSize == 0)
{
Directory.Delete(dir);
@ -903,17 +909,24 @@ namespace OpenSim.Region.CoreModules.Asset
s.ForEachSOG(delegate(SceneObjectGroup e)
{
if(!m_timerRunning && !tryGetUncached)
if(!m_timerRunning && !tryGetUncached || e.IsDeleted)
return;
gatherer.AddForInspection(e);
gatherer.GatherAll();
if (++cooldown > 100)
if (++cooldown > 200)
{
GC.Collect();
gatherer.AssetGetCount = 0;
Thread.Sleep(50);
cooldown = 0;
}
else if(gatherer.AssetGetCount > 200)
{
GC.Collect();
gatherer.AssetGetCount = 0;
}
});
if(!m_timerRunning && !tryGetUncached)
break;
@ -931,8 +944,10 @@ namespace OpenSim.Region.CoreModules.Asset
cooldown += 50;
m_AssetService.Get(idstr);
}
if (++cooldown > 1000)
if (++cooldown > 500)
{
if(tryGetUncached)
GC.Collect();
Thread.Sleep(50);
cooldown = 0;
}
@ -943,6 +958,7 @@ namespace OpenSim.Region.CoreModules.Asset
gatherer.FailedUUIDs.Clear();
gatherer.UncertainAssetsUUIDs.Clear();
GC.Collect();
return count;
}
@ -1149,7 +1165,7 @@ namespace OpenSim.Region.CoreModules.Asset
}
}
int assetReferenceTotal = TouchAllSceneAssets(true);
GC.Collect();
lock(timerLock)
{
if(wasRunning)
@ -1194,7 +1210,10 @@ namespace OpenSim.Region.CoreModules.Asset
break;
}
if (m_FileCacheEnabled)
{
TouchAllSceneAssets(false);
CleanExpiredFiles(m_CacheDirectory, expirationDate);
}
else
con.Output("File cache not active, not clearing.");

View File

@ -237,6 +237,7 @@ namespace OpenSim.Region.Framework.Scenes
public HashSet<UUID> UncertainAssetsUUIDs { get; private set; }
public int possibleNotAssetCount { get; set; }
public int ErrorCount { get; private set; }
public int AssetGetCount;
private bool verbose = true;
/// <summary>
@ -291,6 +292,7 @@ namespace OpenSim.Region.Framework.Scenes
UncertainAssetsUUIDs = uncertainAssetsUUIDs;
ErrorCount = 0;
possibleNotAssetCount = 0;
AssetGetCount = 0;
}
public bool AddGathered(UUID uuid, sbyte type)
@ -561,6 +563,8 @@ namespace OpenSim.Region.Framework.Scenes
return;
}
++AssetGetCount;
if(UncertainAssetsUUIDs.Contains(assetUuid))
UncertainAssetsUUIDs.Remove(assetUuid);