dispatch_semaphore_create(0) возвращает ноль

Пытаюсь создать семафор в очереди GCDAsyncSocket и вместо этого получаю nil... что мне здесь не хватает?

                    dispatch_semaphore_t s = dispatch_semaphore_create(0);
                    // s == nil here !?!
                    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                        NSAppleScript *run = [[NSAppleScript alloc] initWithSource:script];
                        eventDesc = [run executeAndReturnError:&errorDict];
                        dispatch_semaphore_signal(s);
                    });
                    dispatch_semaphore_wait(s, 15 * NSEC_PER_SEC);

Вот стековая гонка

    <_NSCallStackArray 0x604000529d10>(
0   ???                                 0x00000001043ef09f 0x0 + 4366200991,
1   Remote for Mac                      0x0000000100008520 main + 0,
2   Remote for Mac                      0x00000001001a216f -[HTTPConnection replyToHTTPRequest] + 3743,
3   Remote for Mac                      0x00000001001b2eeb -[HTTPConnection socket:didReadData:withTag:] + 7643,
4   Remote for Mac                      0x00000001000de635 __37-[GCDAsyncSocket completeCurrentRead]_block_invoke + 405,
5   libclang_rt.asan_osx_dynamic.dylib  0x000000010096220f __wrap_dispatch_async_block_invoke + 271,
6   libdispatch.dylib                   0x00000001018b1cfe _dispatch_call_block_and_release + 12,
7   libdispatch.dylib                   0x00000001018a878c _dispatch_client_callout + 8,
8   libdispatch.dylib                   0x00000001018bf93f _dispatch_queue_serial_drain + 205,
9   libdispatch.dylib                   0x00000001018b1aa2 _dispatch_queue_invoke + 1174,
10  libdispatch.dylib                   0x00000001018aaa0c _dispatch_root_queue_drain + 671,
11  libdispatch.dylib                   0x00000001018aa71d _dispatch_worker_thread3 + 114,
12  libsystem_pthread.dylib             0x000000010191f7da _pthread_wqthread + 1299,
13  libsystem_pthread.dylib             0x000000010191f2b5 start_wqthread + 13
)

person Cherpak Evgeny    schedule 19.05.2017    source источник


Ответы (1)


Мозг плавится - ждать надо

dispatch_semaphore_wait(s, dispatch_time(DISPATCH_TIME_NOW, 15.0 * NSEC_PER_SEC));
person Cherpak Evgeny    schedule 19.05.2017