Browse Source

Avoid memory leak by clearing the shared array pool of LightweightObservableBase (#19167)

release/11.3.3
walterlv 7 months ago
committed by Julien Lebosquain
parent
commit
60f0f69617
  1. 4
      src/Avalonia.Base/Reactive/LightweightObservableBase.cs

4
src/Avalonia.Base/Reactive/LightweightObservableBase.cs

@ -20,7 +20,7 @@ namespace Avalonia.Reactive
private List<IObserver<T>>? _observers = new List<IObserver<T>>();
public bool HasObservers => _observers?.Count > 0;
public IDisposable Subscribe(IObserver<T> observer)
{
_ = observer ?? throw new ArgumentNullException(nameof(observer));
@ -168,6 +168,8 @@ namespace Avalonia.Reactive
for(int i = 0; i < count; i++)
{
observers[i].OnNext(value);
// Avoid memory leak by clearing the reference.
observers[i] = null!;
}
ArrayPool<IObserver<T>>.Shared.Return(observers);

Loading…
Cancel
Save