X-Git-Url: https://git.saurik.com/apple/libdispatch.git/blobdiff_plain/d4e0f4aade4f18254fb326a5aa6c521fad1930d2..24954c793bca436d612851de3a460c72ef1f7b6d:/testing/queue_finalizer.c diff --git a/testing/queue_finalizer.c b/testing/queue_finalizer.c new file mode 100644 index 0000000..6411b9a --- /dev/null +++ b/testing/queue_finalizer.c @@ -0,0 +1,46 @@ +#include +#include +#include +#include +#include +#include + +#include "dispatch_test.h" + +int main(void) { + long res; + + test_start("Dispatch Queue Finalizer"); + +#ifdef __LP64__ + void* ctxt_magic = (void*)((uintptr_t)arc4random() << 32 | arc4random()); +#else + void* ctxt_magic = (void*)arc4random(); +#endif + + dispatch_queue_attr_t attr = dispatch_queue_attr_create(); + test_ptr_notnull("dispatch_queue_attr_create", attr); + + __block long finalizer_ran = 0; + + res = dispatch_queue_attr_set_finalizer(attr, ^(dispatch_queue_t dq) { + void* ctxt = dispatch_queue_get_context(dq); + test_ptr("dispatch_queue_get_context", ctxt, ctxt_magic); + test_ptr_notnull("finalizer ran", dq); + test_stop(); + }); + test_long("dispatch_queue_attr_set_finalizer", res, 0); + + dispatch_queue_t q = dispatch_queue_create(NULL, attr); + test_ptr_notnull("dispatch_queue_new", q); + + dispatch_queue_set_context(q, ctxt_magic); + + dispatch_release(attr); + + dispatch_release(q); + + dispatch_main(); + + return 0; +}