Jinoh Kang (@iamahuman) commented about dlls/ntdll/unix/virtual.c:
kret = p_thread_get_register_pointer_values( threads[i], &sp, ®_count, reg_values );
/* This function always fails when querying Rosetta's exception handling thread, so we only treat
KERN_INSUFFICIENT_BUFFER_SIZE as an error, like .NET core does. */
if (kret == KERN_INSUFFICIENT_BUFFER_SIZE)
goto fail;
/* Deallocate thread reference once we're done with it */
kret = mach_port_deallocate( mach_task_self(), threads[i++] );
if (kret)
goto fail;
- }
- success = TRUE;
+fail:
- /* Deallocate remaining thread references */
- while (i < count)
mach_port_deallocate( mach_task_self(), threads[i++] );
(to continue from above, note that we don't check for the error here; we don't need it anyway.)