From 4b4a5b2411091ccda2cd6373631ec7ccd184c577 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Wed, 5 Aug 2026 13:51:40 -0700 Subject: [PATCH] renderer/metal: clear callback before layer release Clear the IOSurfaceLayer display callback when releasing the wrapper. The host view can retain the backing layer beyond renderer teardown. This prevents a later Core Animation display pass from invoking the callback with a freed renderer context. --- src/renderer/metal/IOSurfaceLayer.zig | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/renderer/metal/IOSurfaceLayer.zig b/src/renderer/metal/IOSurfaceLayer.zig index 34fbfbed5..cd97126a4 100644 --- a/src/renderer/metal/IOSurfaceLayer.zig +++ b/src/renderer/metal/IOSurfaceLayer.zig @@ -40,6 +40,10 @@ pub fn init() !IOSurfaceLayer { } pub fn release(self: *IOSurfaceLayer) void { + // The layer may be retained by the view after we release our reference. + // Clear the callback first so that a later display pass can't access the + // renderer that owned this wrapper after it has been freed. + self.setDisplayCallback(null, null); self.layer.release(); }