// // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. #include #include #include //#import #include // CONFIG rdar://problem/6371811 const char *whoami = "nobody"; void EnqueueStuff(dispatch_queue_t q) { __block CFIndex counter; // above call has a side effect: it works around: // __block variables not implicitly imported into intermediate scopes dispatch_async(q, ^{ counter = 0; }); dispatch_async(q, ^{ //printf("outer block.\n"); counter++; dispatch_async(q, ^{ //printf("inner block.\n"); counter--; if(counter == 0) { printf("%s: success\n", whoami); exit(0); } }); if(counter == 0) { printf("already done? inconceivable!\n"); exit(1); } }); } int main (int argc, const char * argv[]) { dispatch_queue_t q = dispatch_queue_create("queue", NULL); whoami = argv[0]; EnqueueStuff(q); dispatch_main(); printf("shouldn't get here\n"); return 1; }