Hi everyone, During my work for libDispatch I had to find a way for implementing TSD de-allocators (which are not available on windows). While doing so I did some extensive debugging on OS X / Linux for understanding what is actually happening when calling dispatch_main(). Weird enough it seemed to me as if the main thread would never execute an item from the main queue but simply go to sleep instead. To verify this behaviour, I wrote a test to compare the pthread_t handles during execution: static pthread_t main_thread; void pass(void* dt){ pthread_t now = pthread_self(); assert(pthread_equal(now, main_thread) == 1); exit(0); } void dispatch_api() { dispatch_queue_t q = NULL; main_thread = pthread_self(); q = dispatch_get_main_queue(); assert(q != NULL); dispatch_async_f(q, NULL, pass); ... dispatch_main(); } This test is approving my suspicions, as the pthread_equal(...) assertion is constantly failing. So the big question is: What am I missing? I thought the main queue is available as a mean to be sure some blocks execute on the main thread (e.g. when updating the GUI is only possible while being on the main thread). I welcome any hints or help. - Marius Zwicker