From a8fed229f6848f9f0128ece2f911e560db96ac12 Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Sun, 24 Aug 2025 15:18:17 +0200 Subject: [PATCH] Fix font memory leak in tests (#19514) --- src/Avalonia.Base/Media/FontManager.cs | 11 ++++++++++- .../Media/CustomFontManagerImpl.cs | 7 ++++++- tests/Avalonia.UnitTests/UnitTestApplication.cs | 3 ++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/Avalonia.Base/Media/FontManager.cs b/src/Avalonia.Base/Media/FontManager.cs index 77118b06a9..2671305222 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); @@ -368,5 +368,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 722f97b78b..296c62d5af 100644 --- a/tests/Avalonia.UnitTests/UnitTestApplication.cs +++ b/tests/Avalonia.UnitTests/UnitTestApplication.cs @@ -51,7 +51,8 @@ namespace Avalonia.UnitTests } ((ToolTipService)AvaloniaLocator.Current.GetService())?.Dispose(); - + (AvaloniaLocator.Current.GetService() as IDisposable)?.Dispose(); + Dispatcher.ResetForUnitTests(); scope.Dispose(); Dispatcher.ResetBeforeUnitTests();