(oh, and the underlying lock isn't reentrant) - __block is assigned by a call to _allocate_lock which is thread.allocate_lock
So RLock has been built on a non-reentrant lock primitive, which would be fine if we didn't reenter here.
(oh, and the underlying lock isn't reentrant) - allocate_ lock
__block is assigned by a call to _allocate_lock which is thread.
So RLock has been built on a non-reentrant lock primitive, which would be fine if we didn't reenter here.