From 9c6e36c193b432b3643fa37cf9d5ed559236a103 Mon Sep 17 00:00:00 2001 From: Benedikt Stebner Date: Mon, 25 Aug 2025 09:53:11 +0200 Subject: [PATCH] Fix font memory leak in tests (#19514) (#19534) * Fix font memory leak in tests (#19514) * Revert change --------- Co-authored-by: Julien Lebosquain --- src/Avalonia.Base/Media/FontManager.cs | 11 ++++++++++- .../Media/CustomFontManagerImpl.cs | 7 ++++++- tests/Avalonia.UnitTests/UnitTestApplication.cs | 2 +- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/Avalonia.Base/Media/FontManager.cs b/src/Avalonia.Base/Media/FontManager.cs index c51dbbfee3..8afb1537d6 100644 --- a/src/Avalonia.Base/Media/FontManager.cs +++ b/src/Avalonia.Base/Media/FontManager.cs @@ -15,7 +15,7 @@ namespace Avalonia.Media /// The font manager is used to query the system's installed fonts and is responsible for caching loaded fonts. /// It is also responsible for the font fallback. /// - public sealed class FontManager + public sealed class FontManager : IDisposable { internal static Uri SystemFontsKey = new Uri("fonts:SystemFonts", UriKind.Absolute); @@ -410,5 +410,14 @@ namespace Avalonia.Media return defaultFontFamilyName; } + + void IDisposable.Dispose() + { + foreach (var pair in _fontCollections) + pair.Value.Dispose(); + + _fontCollections.Clear(); + (PlatformImpl as IDisposable)?.Dispose(); + } } } diff --git a/tests/Avalonia.Skia.UnitTests/Media/CustomFontManagerImpl.cs b/tests/Avalonia.Skia.UnitTests/Media/CustomFontManagerImpl.cs index 22dd2dd8fe..e3db4a05ea 100644 --- a/tests/Avalonia.Skia.UnitTests/Media/CustomFontManagerImpl.cs +++ b/tests/Avalonia.Skia.UnitTests/Media/CustomFontManagerImpl.cs @@ -10,7 +10,7 @@ using System.IO; namespace Avalonia.Skia.UnitTests.Media { - public class CustomFontManagerImpl : IFontManagerImpl + public class CustomFontManagerImpl : IFontManagerImpl, IDisposable { private readonly string _defaultFamilyName; private readonly IFontCollection _customFonts; @@ -94,5 +94,10 @@ namespace Avalonia.Skia.UnitTests.Media return true; } + + public void Dispose() + { + _customFonts.Dispose(); + } } } diff --git a/tests/Avalonia.UnitTests/UnitTestApplication.cs b/tests/Avalonia.UnitTests/UnitTestApplication.cs index 453c6c05d1..90f5d050eb 100644 --- a/tests/Avalonia.UnitTests/UnitTestApplication.cs +++ b/tests/Avalonia.UnitTests/UnitTestApplication.cs @@ -51,7 +51,7 @@ namespace Avalonia.UnitTests } ((ToolTipService)AvaloniaLocator.Current.GetService())?.Dispose(); - + (AvaloniaLocator.Current.GetService() as IDisposable)?.Dispose(); scope.Dispose(); Dispatcher.ResetForUnitTests(); SynchronizationContext.SetSynchronizationContext(oldContext);