metal : fix memory leaks due to missing autoreleasepools (#27758)

This commit is contained in:
Niklas Wenzel
2026-08-27 12:53:08 +03:00
committed by GitHub
parent c5fc7e3488
commit 915dc6d38c
2 changed files with 296 additions and 290 deletions
+2
View File
@@ -84,6 +84,7 @@ struct ggml_metal {
ggml_metal_t ggml_metal_init(ggml_metal_device_t dev) {
GGML_LOG_INFO("%s: allocating\n", __func__);
@autoreleasepool {
#if TARGET_OS_OSX && !GGML_METAL_NDEBUG
// Show all the Metal device instances in the system
NSArray * devices = MTLCopyAllDevices();
@@ -185,6 +186,7 @@ ggml_metal_t ggml_metal_init(ggml_metal_device_t dev) {
return res;
}
}
void ggml_metal_free(ggml_metal_t ctx) {
GGML_LOG_INFO("%s: deallocating\n", __func__);
+4
View File
@@ -778,8 +778,10 @@ void ggml_metal_encoder_free(ggml_metal_encoder_t encoder) {
}
void ggml_metal_encoder_debug_group_push(ggml_metal_encoder_t encoder, const char * name) {
@autoreleasepool {
[encoder->obj pushDebugGroup:[NSString stringWithCString:name encoding:NSUTF8StringEncoding]];
}
}
void ggml_metal_encoder_debug_group_pop (ggml_metal_encoder_t encoder) {
[encoder->obj popDebugGroup];
@@ -1023,6 +1025,7 @@ ggml_metal_device_t ggml_metal_device_init(int device, int n_devices) {
assert(dev != NULL);
@autoreleasepool {
if (dev->mtl_device == nil) {
dev->mtl_device = MTLCreateSystemDefaultDevice();
@@ -1268,6 +1271,7 @@ ggml_metal_device_t ggml_metal_device_init(int device, int n_devices) {
#endif
}
}
}
return dev;
}