Sunkas
Sunkas

Reputation: 9590

SIGABRT "The following Metal object is being destroyed while still required to be alive by the command buffer" in macCatalyst randomly

I have macCatalyst app that recently gets some random crashes. Searched everywhere but without finding any good leads. My guess is that it's related to memory or too many views visible on the screen. I do not get a good stack trace, but this it what's showing in the log:

-[MTLDebugDevice notifyExternalReferencesNonZeroOnDealloc:]:2951: failed assertion `The following Metal object is being destroyed while still required to be alive by the command buffer 0x7f8cd811c600 (label: <no label set>):
<MTLToolsObject: 0x7f8b0f9e3d60> -> <MTLIGAccelTexture: 0x7f8cd8566a00>
    label = CAMetalLayer Drawable 
    textureType = MTLTextureType2D 
    pixelFormat = MTLPixelFormatBGRA8Unorm_sRGB 
width = 772 
height = 1372 
depth = 1 
arrayLength = 1 
mipmapLevelCount = 1 
sampleCount = 1 
cpuCacheMode = MTLCPUCacheModeDefaultCache 
storageMode = MTLStorageModeManaged 
hazardTrackingMode = MTLHazardTrackingModeTracked 
resourceOptions = MTLResourceCPUCacheModeDefaultCache MTLResourceStorageModeManaged MTLResourceHazardTrackingModeTracked  
usage = MTLTextureUsageShaderRead MTLTextureUsageShaderWrite MTLTextureUsageRenderTarget MTLTextureUsagePixelFormatView 
shareable = 0 
framebufferOnly = 0 
purgeableState = MTLPurgeableStateNonVolatile 
swizzle = [MTLTextureSwizzleRed, MTLTextureSwizzleGreen, MTLTextureSwizzleBlue, MTLTextureSwizzleAlpha] 
isCompressed = 0 
parentTexture = <null> 
parentRelativeLevel = 0 
parentRelativeSlice = 0 
buffer = <null> 
bufferOffset = 0 
bufferBytesPerRow = 0 
iosurface = 0x600002533060 
iosurfacePlane = 0 
allowGPUOptimizedContents = YES'
-[MTLDebugDevice notifyExternalReferencesNonZeroOnDealloc:]:2951: failed assertion `The following Metal object is being destroyed while still required to be alive by the command buffer 0x7f8cd811c600 (label: <no label set>):
<MTLToolsObject: 0x7f8b0f9e3d60> -> <MTLIGAccelTexture: 0x7f8cd8566a00>
    label = CAMetalLayer Drawable 
textureType = MTLTextureType2D 
pixelFormat = MTLPixelFormatBGRA8Unorm_sRGB 
width = 772 
height = 1372 
depth = 1 
arrayLength = 1 
mipmapLevelCount = 1 
sampleCount = 1 
cpuCacheMode = MTLCPUCacheModeDefaultCache 
storageMode = MTLStorageModeManaged 
hazardTrackingMode = MTLHazardTrackingModeTracked 
resourceOptions = MTLResourceCPUCacheModeDefaultCache MTLResourceStorageModeManaged MTLResourceHazardTrackingModeTracked  
usage = MTLTextureUsageShaderRead MTLTextureUsageShaderWrite MTLTextureUsageRenderTarget MTLTextureUsagePixelFormatView 
shareable = 0 
framebufferOnly = 0 
purgeableState = MTLPurgeableStateNonVolatile 
swizzle = [MTLTextureSwizzleRed, MTLTextureSwizzleGreen, MTLTextureSwizzleBlue, MTLTextureSwizzleAlpha] 
isCompressed = 0 
parentTexture = <null> 
parentRelativeLevel = 0 
parentRelativeSlice = 0 
buffer = <null> 
bufferOffset = 0 
bufferBytesPerRow = 0 
iosurface = 0x600002533060 
iosurfacePlane = 0 
allowGPUOptimizedContents = YES'

I'm running on a Intel Mac mini with 32Gb memory. It often crashes often when showing a MapView on screen. But also in some other cases.

Edit: Could be related to programatically zooming in animated in a MapView on MacCatalyst. A workaround is for now to disable the animation. Will research more.

Upvotes: 7

Views: 2052

Answers (1)

Wessley
Wessley

Reputation: 340

This Developer Forums thread suggests disabling Metal API Validation. I was having the same problem and that seemed to fix it.

In Xcode, in the "Product" Menu, go to "Scheme", then "Edit Scheme...". In the left panel select "Run (Debug)" and in Diagnostic tab uncheck "API Validation" under Metal settings

Upvotes: 5

Related Questions