diff --git a/Pooling/Pool.cs b/Pooling/Pool.cs index 102931a..75182bd 100644 --- a/Pooling/Pool.cs +++ b/Pooling/Pool.cs @@ -1,10 +1,12 @@ using System; using System.Collections.Generic; +using Exanite.Core.Runtime; namespace Exanite.Core.Pooling { - public abstract class Pool : IDisposable + public abstract class Pool : ITrackedDisposable { + public bool IsDisposed { get; protected set; } public abstract PoolUsageInfo UsageInfo { get; } public abstract void Dispose(); @@ -24,8 +26,6 @@ public class Pool : Pool private PoolUsageInfo usageInfo; - public int MaxInactive { get; private set; } - public override PoolUsageInfo UsageInfo { get @@ -48,7 +48,7 @@ public Pool( } values = new Queue(); - MaxInactive = maxInactive; + usageInfo.MaxInactive = maxInactive; this.create = () => { @@ -101,7 +101,7 @@ public void Release(T element) onRelease.Invoke(element); UpdateUsageInfo(); - if (usageInfo.InactiveCount < MaxInactive) + if (usageInfo.InactiveCount < usageInfo.MaxInactive) { values.Enqueue(element); } @@ -116,6 +116,7 @@ public void Clear() { foreach (var value in values) { + usageInfo.TotalCount--; onDestroy.Invoke(value); } @@ -124,15 +125,20 @@ public void Clear() private void UpdateUsageInfo() { - usageInfo.MaxInactive = MaxInactive; usageInfo.InactiveCount = values.Count; usageInfo.ActiveCount = usageInfo.TotalCount - usageInfo.InactiveCount; } public override void Dispose() { - Clear(); + if (IsDisposed) + { + return; + } + + IsDisposed = true; + Clear(); Pools.RemovePool(this); }