From 15f7eea6f4120464dcf5642d718ca7fc33a40405 Mon Sep 17 00:00:00 2001 From: Peter Shoebridge Date: Sat, 31 Jan 2026 16:05:37 -0700 Subject: [PATCH 1/2] Fix MauiCALayer and StaticCAShapeLayer crash on finalizer thread --- src/Core/src/Platform/iOS/MauiCALayer.cs | 7 +++++-- src/Core/src/Platform/iOS/StaticCAShapeLayer.cs | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Core/src/Platform/iOS/MauiCALayer.cs b/src/Core/src/Platform/iOS/MauiCALayer.cs index f2d6ead0e4a0..c8a3818ac07f 100644 --- a/src/Core/src/Platform/iOS/MauiCALayer.cs +++ b/src/Core/src/Platform/iOS/MauiCALayer.cs @@ -42,7 +42,10 @@ public MauiCALayer() protected override void Dispose(bool disposing) { - _autosizeToSuperLayerBehavior.Detach(); + if (disposing) + { + _autosizeToSuperLayerBehavior.Detach(); + } base.Dispose(disposing); } @@ -419,4 +422,4 @@ bool IsBorderDashed() return _strokeDash != null; } } -} \ No newline at end of file +} diff --git a/src/Core/src/Platform/iOS/StaticCAShapeLayer.cs b/src/Core/src/Platform/iOS/StaticCAShapeLayer.cs index 5c767e8b3e72..9d5498924cf4 100644 --- a/src/Core/src/Platform/iOS/StaticCAShapeLayer.cs +++ b/src/Core/src/Platform/iOS/StaticCAShapeLayer.cs @@ -10,7 +10,10 @@ class StaticCAShapeLayer : CAShapeLayer, IAutoSizableCALayer protected override void Dispose(bool disposing) { - _autosizeToSuperLayerBehavior.Detach(); + if (disposing) + { + _autosizeToSuperLayerBehavior.Detach(); + } base.Dispose(disposing); } @@ -29,4 +32,4 @@ public override void AddAnimation(CAAnimation animation, string? key) { // Do nothing, we don't want animations here } -} \ No newline at end of file +} From 8f732104457b55152bfaeb0ea1592c983d8941a3 Mon Sep 17 00:00:00 2001 From: Peter Shoebridge Date: Sun, 1 Feb 2026 09:17:36 -0700 Subject: [PATCH 2/2] Also fix StaticCALayer and StaticCAGradientLayer --- src/Core/src/Platform/iOS/StaticCAGradientLayer.cs | 5 ++++- src/Core/src/Platform/iOS/StaticCALayer.cs | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Core/src/Platform/iOS/StaticCAGradientLayer.cs b/src/Core/src/Platform/iOS/StaticCAGradientLayer.cs index 65e7311e87a0..bb38b38c6c76 100644 --- a/src/Core/src/Platform/iOS/StaticCAGradientLayer.cs +++ b/src/Core/src/Platform/iOS/StaticCAGradientLayer.cs @@ -10,7 +10,10 @@ class StaticCAGradientLayer : CAGradientLayer, IAutoSizableCALayer protected override void Dispose(bool disposing) { - _autosizeToSuperLayerBehavior.Detach(); + if (disposing) + { + _autosizeToSuperLayerBehavior.Detach(); + } base.Dispose(disposing); } diff --git a/src/Core/src/Platform/iOS/StaticCALayer.cs b/src/Core/src/Platform/iOS/StaticCALayer.cs index f08a59ce877b..1fc8ba500899 100644 --- a/src/Core/src/Platform/iOS/StaticCALayer.cs +++ b/src/Core/src/Platform/iOS/StaticCALayer.cs @@ -10,7 +10,10 @@ class StaticCALayer : CALayer, IAutoSizableCALayer protected override void Dispose(bool disposing) { - _autosizeToSuperLayerBehavior.Detach(); + if (disposing) + { + _autosizeToSuperLayerBehavior.Detach(); + } base.Dispose(disposing); }