From 32117402dd8fbac65904023f021f4d72a830d117 Mon Sep 17 00:00:00 2001 From: Pyry Kovanen Date: Thu, 10 Jul 2025 14:01:30 +0300 Subject: [PATCH] metal: fix incorrect _free on interpreter exit (#11158) --- tinygrad/runtime/ops_metal.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tinygrad/runtime/ops_metal.py b/tinygrad/runtime/ops_metal.py index a828e74657..d0251324d4 100644 --- a/tinygrad/runtime/ops_metal.py +++ b/tinygrad/runtime/ops_metal.py @@ -198,7 +198,8 @@ class MetalAllocator(LRUAllocator[MetalDevice]): ret = msg("newBufferWithLength:options:", objc_id)(self.dev.sysdevice, ctypes.c_ulong(size), MTLResourceOptions.MTLResourceStorageModeShared) if ret.value is None: raise MemoryError(f"Metal OOM while allocating {size=}") return MetalBuffer(ret, size) - def _free(self, opaque:MetalBuffer, options): msg("release")(opaque.buf) + def _free(self, opaque:MetalBuffer, options): + if msg is not None and libobjc is not None: msg("release")(opaque.buf) def _transfer(self, dest:MetalBuffer, src:MetalBuffer, sz:int, src_dev:MetalDevice, dest_dev:MetalDevice): dest_dev.synchronize() src_command_buffer = msg("commandBuffer", objc_instance)(src_dev.mtl_queue)