From d38cc5ade44bbb3bf104097e89ed11858dab6d67 Mon Sep 17 00:00:00 2001 From: aguahombre Date: Fri, 7 Nov 2025 16:19:57 +0000 Subject: [PATCH] Fix ServerCompositionSimplePen memory leak (#19958) * Fix for Issue#16451 * Remove the pen from the brush observers without queuing the pen for invalidation. --- .../Drawing/ServerCompositionSimplePen.cs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Avalonia.Base/Rendering/Composition/Drawing/ServerCompositionSimplePen.cs b/src/Avalonia.Base/Rendering/Composition/Drawing/ServerCompositionSimplePen.cs index 8e99a1cc01..725959c728 100644 --- a/src/Avalonia.Base/Rendering/Composition/Drawing/ServerCompositionSimplePen.cs +++ b/src/Avalonia.Base/Rendering/Composition/Drawing/ServerCompositionSimplePen.cs @@ -1,12 +1,19 @@ -using System; using Avalonia.Media; -using Avalonia.Media.Immutable; -using Avalonia.Rendering.Composition.Server; -using Avalonia.Rendering.Composition.Transport; namespace Avalonia.Rendering.Composition.Server; internal partial class ServerCompositionSimplePen : IPen { IDashStyle? IPen.DashStyle => DashStyle; -} \ No newline at end of file + + /// + public override void Dispose() + { + // Remove the pen from the brush observers. + // Without this, the pen was being retained in memory by long lived brush resources (e.g. those defined in + // the theme or app resources), hence was causing memory leaks; see Issue #16451 + RemoveObserversFromProperty(ref _brush); + _brush = null; + base.Dispose(); + } +}