#include "internal.h"
}
+// NOTE: this file must not contain any atomic operations
+
#if DISPATCH_DEBUG && DISPATCH_BLOCK_PRIVATE_DATA_DEBUG
#define _dispatch_block_private_data_debug(msg, ...) \
_dispatch_debug("block_private[%p]: " msg, (this), ##__VA_ARGS__)
if (!dbpd_performed) dispatch_group_leave(dbpd_group);
((void (*)(dispatch_group_t))dispatch_release)(dbpd_group);
}
+ if (dbpd_queue) {
+ ((void (*)(os_mpsc_queue_t, uint16_t))
+ _os_object_release_internal_n)(dbpd_queue, 2);
+ }
if (dbpd_block) Block_release(dbpd_block);
if (dbpd_voucher) voucher_release(dbpd_voucher);
}
return _dispatch_Block_copy(^{
// Capture stack object: invokes copy constructor (17094902)
(void)dbpds;
- _dispatch_block_invoke(&dbpds);
+ _dispatch_block_invoke_direct(&dbpds);
});
}
// The compiler hides the name of the function it generates, and changes it if
// we try to reference it directly, but the linker still sees it.
extern void DISPATCH_BLOCK_SPECIAL_INVOKE(void *)
+#ifdef __linux__
+ asm("___dispatch_block_create_block_invoke");
+#else
asm("____dispatch_block_create_block_invoke");
+#endif
void (*_dispatch_block_special_invoke)(void*) = DISPATCH_BLOCK_SPECIAL_INVOKE;
}