Jinoh Kang (@iamahuman) commented about dlls/ntdll/unix/virtual.c:
- {
uintptr_t reg_values[128];size_t reg_count = ARRAY_SIZE( reg_values );uintptr_t sp;/* Request the thread's register pointer values to force the thread to go through a memory barrier */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 treatKERN_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;
Likewise, breaking out of loop seems unnecessary. We don't even have to fail, since the barrier operation itself isn't affected by this. If we want to do some error handling then `ERR()` logging should be enough.