-typedef uintptr_t _dispatch_thread_semaphore_t;
-
-_dispatch_thread_semaphore_t _dispatch_thread_semaphore_create(void);
-void _dispatch_thread_semaphore_dispose(_dispatch_thread_semaphore_t);
-void _dispatch_thread_semaphore_wait(_dispatch_thread_semaphore_t);
-void _dispatch_thread_semaphore_signal(_dispatch_thread_semaphore_t);
-
-DISPATCH_ALWAYS_INLINE
-static inline _dispatch_thread_semaphore_t
-_dispatch_get_thread_semaphore(void)
-{
- _dispatch_thread_semaphore_t sema = (_dispatch_thread_semaphore_t)
- _dispatch_thread_getspecific(dispatch_sema4_key);
- if (slowpath(!sema)) {
- return _dispatch_thread_semaphore_create();
- }
- _dispatch_thread_setspecific(dispatch_sema4_key, NULL);
- return sema;
-}
-
-DISPATCH_ALWAYS_INLINE
-static inline void
-_dispatch_put_thread_semaphore(_dispatch_thread_semaphore_t sema)
-{
- _dispatch_thread_semaphore_t old_sema = (_dispatch_thread_semaphore_t)
- _dispatch_thread_getspecific(dispatch_sema4_key);
- _dispatch_thread_setspecific(dispatch_sema4_key, (void*)sema);
- if (slowpath(old_sema)) {
- return _dispatch_thread_semaphore_dispose(old_sema);
- }
-}
+void _dispatch_semaphore_dispose(dispatch_object_t dou, bool *allow_free);
+size_t _dispatch_semaphore_debug(dispatch_object_t dou, char *buf,
+ size_t bufsiz);