Skip to content

Commit ff7dc5b

Browse files
committed
Merge libdispatch-743
Signed-off-by: Daniel A. Steffen <dsteffen@apple.com>
1 parent 13aebd2 commit ff7dc5b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

89 files changed

+10806
-9824
lines changed

.gitmodules

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
11
[submodule "libpwq"]
22
path = libpwq
33
url = https://github.com/mheily/libpwq.git
4-
[submodule "libkqueue"]
5-
path = libkqueue
6-
url = https://github.com/mheily/libkqueue.git

INSTALL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ on Ubuntu; currently supported versions are 14.04, 15.10 and 16.04.
159159
`sudo apt-get install systemtap-sdt-dev`
160160
161161
1c. Install additional libdispatch dependencies
162-
`sudo apt-get install libblocksruntime-dev libkqueue-dev libbsd-dev`
162+
`sudo apt-get install libblocksruntime-dev libbsd-dev`
163163
164164
Note: compiling libdispatch requires clang 3.8 or better and
165165
the gold linker. If the default clang on your Ubuntu version is

config/config.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,18 @@
55
you don't. */
66
#define HAVE_DECL_CLOCK_MONOTONIC 0
77

8+
/* Define to 1 if you have the declaration of `CLOCK_REALTIME', and to 0 if
9+
you don't. */
10+
#define CLOCK_REALTIME 0
11+
812
/* Define to 1 if you have the declaration of `CLOCK_UPTIME', and to 0 if you
913
don't. */
1014
#define HAVE_DECL_CLOCK_UPTIME 0
1115

16+
/* Define to 1 if you have the declaration of `HAVE_DECL_CLOCK_UPTIME_FAST',
17+
and to 0 if you don't. */
18+
#define HAVE_DECL_CLOCK_UPTIME_FAST 0
19+
1220
/* Define to 1 if you have the declaration of `FD_COPY', and to 0 if you
1321
don't. */
1422
#define HAVE_DECL_FD_COPY 1
@@ -87,6 +95,9 @@
8795
/* Define to 1 if you have the `mach_absolute_time' function. */
8896
#define HAVE_MACH_ABSOLUTE_TIME 1
8997

98+
/* Define to 1 if you have the `mach_approximate_time' function. */
99+
#define HAVE_MACH_APPROXIMATE_TIME 1
100+
90101
/* Define to 1 if you have the `mach_port_construct' function. */
91102
#define HAVE_MACH_PORT_CONSTRUCT 1
92103

configure.ac

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -295,19 +295,6 @@ esac
295295
AC_SEARCH_LIBS(clock_gettime, rt)
296296
AC_SEARCH_LIBS(pthread_create, pthread)
297297

298-
AS_IF([test -f $srcdir/libkqueue/configure.ac],
299-
[AC_DEFINE(BUILD_OWN_KQUEUES, 1, [Define if building libkqueue from source])
300-
ac_configure_args="--disable-libkqueue-install $ac_configure_args"
301-
AC_CONFIG_SUBDIRS([libkqueue])
302-
build_own_kqueues=true],
303-
[build_own_kqueues=false
304-
AC_CHECK_HEADER(sys/event.h, [],
305-
[PKG_CHECK_MODULES(KQUEUE, libkqueue)]
306-
)
307-
]
308-
)
309-
AM_CONDITIONAL(BUILD_OWN_KQUEUES, $build_own_kqueues)
310-
311298
AC_CHECK_FUNCS([strlcpy getprogname], [],
312299
[PKG_CHECK_MODULES(BSD_OVERLAY, libbsd-overlay,[
313300
AC_DEFINE(HAVE_STRLCPY, 1, [])
@@ -423,15 +410,15 @@ AC_CHECK_FUNCS([mach_port_construct])
423410
#
424411
# Find functions and declarations we care about.
425412
#
426-
AC_CHECK_DECLS([CLOCK_UPTIME, CLOCK_MONOTONIC], [], [],
413+
AC_CHECK_DECLS([CLOCK_UPTIME, CLOCK_MONOTONIC, CLOCK_REALTIME, CLOCK_UPTIME_FAST], [], [],
427414
[[#include <time.h>]])
428415
AC_CHECK_DECLS([NOTE_NONE, NOTE_REAP, NOTE_REVOKE, NOTE_SIGNAL, NOTE_LOWAT], [], [],
429416
[[#include <sys/event.h>]])
430417
AC_CHECK_DECLS([FD_COPY], [], [], [[#include <sys/select.h>]])
431418
AC_CHECK_DECLS([SIGEMT], [], [], [[#include <signal.h>]])
432419
AC_CHECK_DECLS([VQ_UPDATE, VQ_VERYLOWDISK, VQ_QUOTA], [], [], [[#include <sys/mount.h>]])
433420
AC_CHECK_DECLS([program_invocation_short_name], [], [], [[#include <errno.h>]])
434-
AC_CHECK_FUNCS([pthread_key_init_np pthread_main_np mach_absolute_time malloc_create_zone sysconf])
421+
AC_CHECK_FUNCS([pthread_key_init_np pthread_main_np mach_absolute_time mach_approximate_time malloc_create_zone sysconf])
435422

436423
AC_CHECK_DECLS([POSIX_SPAWN_START_SUSPENDED],
437424
[have_posix_spawn_start_suspended=true], [have_posix_spawn_start_suspended=false],

dispatch/base.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,10 +204,8 @@
204204
#endif
205205

206206
#if __has_feature(enumerator_attributes)
207-
#define DISPATCH_ENUM_AVAILABLE_STARTING __OSX_AVAILABLE_STARTING
208-
#define DISPATCH_ENUM_AVAILABLE(os, version) __##os##_AVAILABLE(version)
207+
#define DISPATCH_ENUM_AVAILABLE(...) API_AVAILABLE(__VA_ARGS__)
209208
#else
210-
#define DISPATCH_ENUM_AVAILABLE_STARTING(...)
211209
#define DISPATCH_ENUM_AVAILABLE(...)
212210
#endif
213211

dispatch/block.h

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -101,17 +101,17 @@ __BEGIN_DECLS
101101
*/
102102
DISPATCH_ENUM(dispatch_block_flags, unsigned long,
103103
DISPATCH_BLOCK_BARRIER
104-
DISPATCH_ENUM_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0) = 0x1,
104+
DISPATCH_ENUM_AVAILABLE(macos(10.10), ios(8.0)) = 0x1,
105105
DISPATCH_BLOCK_DETACHED
106-
DISPATCH_ENUM_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0) = 0x2,
106+
DISPATCH_ENUM_AVAILABLE(macos(10.10), ios(8.0)) = 0x2,
107107
DISPATCH_BLOCK_ASSIGN_CURRENT
108-
DISPATCH_ENUM_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0) = 0x4,
108+
DISPATCH_ENUM_AVAILABLE(macos(10.10), ios(8.0)) = 0x4,
109109
DISPATCH_BLOCK_NO_QOS_CLASS
110-
DISPATCH_ENUM_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0) = 0x8,
110+
DISPATCH_ENUM_AVAILABLE(macos(10.10), ios(8.0)) = 0x8,
111111
DISPATCH_BLOCK_INHERIT_QOS_CLASS
112-
DISPATCH_ENUM_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0) = 0x10,
112+
DISPATCH_ENUM_AVAILABLE(macos(10.10), ios(8.0)) = 0x10,
113113
DISPATCH_BLOCK_ENFORCE_QOS_CLASS
114-
DISPATCH_ENUM_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0) = 0x20,
114+
DISPATCH_ENUM_AVAILABLE(macos(10.10), ios(8.0)) = 0x20,
115115
);
116116

117117
/*!
@@ -164,7 +164,7 @@ DISPATCH_ENUM(dispatch_block_flags, unsigned long,
164164
* When not building with Objective-C ARC, must be released with a -[release]
165165
* message or the Block_release() function.
166166
*/
167-
__OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0)
167+
API_AVAILABLE(macos(10.10), ios(8.0))
168168
DISPATCH_EXPORT DISPATCH_NONNULL2 DISPATCH_RETURNS_RETAINED_BLOCK
169169
DISPATCH_WARN_RESULT DISPATCH_NOTHROW
170170
dispatch_block_t
@@ -236,7 +236,7 @@ dispatch_block_create(dispatch_block_flags_t flags, dispatch_block_t block);
236236
* When not building with Objective-C ARC, must be released with a -[release]
237237
* message or the Block_release() function.
238238
*/
239-
__OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0)
239+
API_AVAILABLE(macos(10.10), ios(8.0))
240240
DISPATCH_EXPORT DISPATCH_NONNULL4 DISPATCH_RETURNS_RETAINED_BLOCK
241241
DISPATCH_WARN_RESULT DISPATCH_NOTHROW
242242
dispatch_block_t
@@ -269,7 +269,7 @@ dispatch_block_create_with_qos_class(dispatch_block_flags_t flags,
269269
* @param block
270270
* The block to create the temporary block object from.
271271
*/
272-
__OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0)
272+
API_AVAILABLE(macos(10.10), ios(8.0))
273273
DISPATCH_EXPORT DISPATCH_NONNULL2 DISPATCH_NOTHROW
274274
void
275275
dispatch_block_perform(dispatch_block_flags_t flags,
@@ -320,7 +320,7 @@ dispatch_block_perform(dispatch_block_flags_t flags,
320320
* Returns zero on success (the dispatch block object completed within the
321321
* specified timeout) or non-zero on error (i.e. timed out).
322322
*/
323-
__OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0)
323+
API_AVAILABLE(macos(10.10), ios(8.0))
324324
DISPATCH_EXPORT DISPATCH_NONNULL1 DISPATCH_NOTHROW
325325
long
326326
dispatch_block_wait(dispatch_block_t block, dispatch_time_t timeout);
@@ -361,7 +361,7 @@ dispatch_block_wait(dispatch_block_t block, dispatch_time_t timeout);
361361
* @param notification_block
362362
* The notification block to submit when the observed block object completes.
363363
*/
364-
__OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0)
364+
API_AVAILABLE(macos(10.10), ios(8.0))
365365
DISPATCH_EXPORT DISPATCH_NONNULL_ALL DISPATCH_NOTHROW
366366
void
367367
dispatch_block_notify(dispatch_block_t block, dispatch_queue_t queue,
@@ -393,7 +393,7 @@ dispatch_block_notify(dispatch_block_t block, dispatch_queue_t queue,
393393
* The result of passing NULL or a block object not returned by one of the
394394
* dispatch_block_create* functions is undefined.
395395
*/
396-
__OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0)
396+
API_AVAILABLE(macos(10.10), ios(8.0))
397397
DISPATCH_EXPORT DISPATCH_NONNULL_ALL DISPATCH_NOTHROW
398398
void
399399
dispatch_block_cancel(dispatch_block_t block);
@@ -412,7 +412,7 @@ dispatch_block_cancel(dispatch_block_t block);
412412
* @result
413413
* Non-zero if canceled and zero if not canceled.
414414
*/
415-
__OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0)
415+
API_AVAILABLE(macos(10.10), ios(8.0))
416416
DISPATCH_EXPORT DISPATCH_NONNULL_ALL DISPATCH_WARN_RESULT DISPATCH_PURE
417417
DISPATCH_NOTHROW
418418
long

dispatch/data.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ DISPATCH_DATA_DECL(dispatch_data);
5050
*/
5151
#define dispatch_data_empty \
5252
DISPATCH_GLOBAL_OBJECT(dispatch_data_t, _dispatch_data_empty)
53-
__OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_5_0)
53+
API_AVAILABLE(macos(10.7), ios(5.0))
5454
DISPATCH_EXPORT struct dispatch_data_s _dispatch_data_empty;
5555

5656
/*!
@@ -83,7 +83,7 @@ DISPATCH_EXPORT struct dispatch_data_s _dispatch_data_empty;
8383
* was allocated by the malloc() family and should be destroyed with free(3).
8484
*/
8585
#define DISPATCH_DATA_DESTRUCTOR_FREE (_dispatch_data_destructor_free)
86-
__OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_5_0)
86+
API_AVAILABLE(macos(10.7), ios(5.0))
8787
DISPATCH_DATA_DESTRUCTOR_TYPE_DECL(free);
8888

8989
/*!
@@ -92,7 +92,7 @@ DISPATCH_DATA_DESTRUCTOR_TYPE_DECL(free);
9292
* from buffers that require deallocation with munmap(2).
9393
*/
9494
#define DISPATCH_DATA_DESTRUCTOR_MUNMAP (_dispatch_data_destructor_munmap)
95-
__OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_7_0)
95+
API_AVAILABLE(macos(10.9), ios(7.0))
9696
DISPATCH_DATA_DESTRUCTOR_TYPE_DECL(munmap);
9797

9898
#ifdef __BLOCKS__
@@ -117,7 +117,7 @@ DISPATCH_DATA_DESTRUCTOR_TYPE_DECL(munmap);
117117
* is no longer needed.
118118
* @result A newly created dispatch data object.
119119
*/
120-
__OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_5_0)
120+
API_AVAILABLE(macos(10.7), ios(5.0))
121121
DISPATCH_EXPORT DISPATCH_RETURNS_RETAINED DISPATCH_WARN_RESULT DISPATCH_NOTHROW
122122
dispatch_data_t
123123
dispatch_data_create(const void *buffer,
@@ -134,7 +134,7 @@ dispatch_data_create(const void *buffer,
134134
* @param data The dispatch data object to query.
135135
* @result The number of bytes represented by the data object.
136136
*/
137-
__OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_5_0)
137+
API_AVAILABLE(macos(10.7), ios(5.0))
138138
DISPATCH_EXPORT DISPATCH_PURE DISPATCH_NONNULL1 DISPATCH_NOTHROW
139139
size_t
140140
dispatch_data_get_size(dispatch_data_t data);
@@ -158,7 +158,7 @@ dispatch_data_get_size(dispatch_data_t data);
158158
* size of the mapped contiguous memory region, or NULL.
159159
* @result A newly created dispatch data object.
160160
*/
161-
__OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_5_0)
161+
API_AVAILABLE(macos(10.7), ios(5.0))
162162
DISPATCH_EXPORT DISPATCH_NONNULL1 DISPATCH_RETURNS_RETAINED
163163
DISPATCH_WARN_RESULT DISPATCH_NOTHROW
164164
dispatch_data_t
@@ -181,7 +181,7 @@ dispatch_data_create_map(dispatch_data_t data,
181181
* @result A newly created object representing the concatenation of the
182182
* data1 and data2 objects.
183183
*/
184-
__OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_5_0)
184+
API_AVAILABLE(macos(10.7), ios(5.0))
185185
DISPATCH_EXPORT DISPATCH_NONNULL_ALL DISPATCH_RETURNS_RETAINED
186186
DISPATCH_WARN_RESULT DISPATCH_NOTHROW
187187
dispatch_data_t
@@ -202,7 +202,7 @@ dispatch_data_create_concat(dispatch_data_t data1, dispatch_data_t data2);
202202
* @result A newly created object representing the specified
203203
* subrange of the data object.
204204
*/
205-
__OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_5_0)
205+
API_AVAILABLE(macos(10.7), ios(5.0))
206206
DISPATCH_EXPORT DISPATCH_NONNULL1 DISPATCH_RETURNS_RETAINED
207207
DISPATCH_WARN_RESULT DISPATCH_NOTHROW
208208
dispatch_data_t
@@ -247,7 +247,7 @@ typedef bool (^dispatch_data_applier_t)(dispatch_data_t region,
247247
* @result A Boolean indicating whether traversal completed
248248
* successfully.
249249
*/
250-
__OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_5_0)
250+
API_AVAILABLE(macos(10.7), ios(5.0))
251251
DISPATCH_EXPORT DISPATCH_NONNULL_ALL DISPATCH_NOTHROW
252252
bool
253253
dispatch_data_apply(dispatch_data_t data, dispatch_data_applier_t applier);
@@ -267,7 +267,7 @@ dispatch_data_apply(dispatch_data_t data, dispatch_data_applier_t applier);
267267
* start of the queried data object.
268268
* @result A newly created dispatch data object.
269269
*/
270-
__OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_5_0)
270+
API_AVAILABLE(macos(10.7), ios(5.0))
271271
DISPATCH_EXPORT DISPATCH_NONNULL1 DISPATCH_NONNULL3 DISPATCH_RETURNS_RETAINED
272272
DISPATCH_WARN_RESULT DISPATCH_NOTHROW
273273
dispatch_data_t

dispatch/dispatch.h

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,14 @@
2424
#ifdef __APPLE__
2525
#include <Availability.h>
2626
#include <TargetConditionals.h>
27-
#else
28-
#define __OSX_AVAILABLE_STARTING(x, y)
29-
#define __OSX_AVAILABLE_BUT_DEPRECATED(...)
30-
#define __OSX_AVAILABLE_BUT_DEPRECATED_MSG(...)
31-
#define __OSX_AVAILABLE(...)
32-
#define __IOS_AVAILABLE(...)
33-
#define __TVOS_AVAILABLE(...)
34-
#define __WATCHOS_AVAILABLE(...)
35-
#define __OSX_DEPRECATED(...)
36-
#define __IOS_DEPRECATED(...)
37-
#define __TVOS_DEPRECATED(...)
38-
#define __WATCHOS_DEPRECATED(...)
39-
#endif // __APPLE__
27+
#endif
28+
29+
#ifndef API_AVAILABLE
30+
#define API_AVAILABLE(...)
31+
#define API_DEPRECATED(...)
32+
#define API_UNAVAILABLE(...)
33+
#define API_DEPRECATED_WITH_REPLACEMENT(...)
34+
#endif // !API_AVAILABLE
4035

4136
#include <sys/cdefs.h>
4237
#include <sys/types.h>
@@ -55,7 +50,7 @@
5550
#endif
5651
#endif
5752

58-
#define DISPATCH_API_VERSION 20160712
53+
#define DISPATCH_API_VERSION 20160831
5954

6055
#ifndef __DISPATCH_BUILDING_DISPATCH__
6156

dispatch/group.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ __BEGIN_DECLS
5151
* @result
5252
* The newly created group, or NULL on failure.
5353
*/
54-
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0)
54+
API_AVAILABLE(macos(10.6), ios(4.0))
5555
DISPATCH_EXPORT DISPATCH_MALLOC DISPATCH_RETURNS_RETAINED DISPATCH_WARN_RESULT
5656
DISPATCH_NOTHROW
5757
dispatch_group_t
@@ -81,7 +81,7 @@ dispatch_group_create(void);
8181
* The block to perform asynchronously.
8282
*/
8383
#ifdef __BLOCKS__
84-
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0)
84+
API_AVAILABLE(macos(10.6), ios(4.0))
8585
DISPATCH_EXPORT DISPATCH_NONNULL_ALL DISPATCH_NOTHROW
8686
void
8787
dispatch_group_async(dispatch_group_t group,
@@ -115,7 +115,7 @@ dispatch_group_async(dispatch_group_t group,
115115
* parameter passed to this function is the context provided to
116116
* dispatch_group_async_f().
117117
*/
118-
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0)
118+
API_AVAILABLE(macos(10.6), ios(4.0))
119119
DISPATCH_EXPORT DISPATCH_NONNULL1 DISPATCH_NONNULL2 DISPATCH_NONNULL4
120120
DISPATCH_NOTHROW
121121
void
@@ -158,7 +158,7 @@ dispatch_group_async_f(dispatch_group_t group,
158158
* Returns zero on success (all blocks associated with the group completed
159159
* within the specified timeout) or non-zero on error (i.e. timed out).
160160
*/
161-
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0)
161+
API_AVAILABLE(macos(10.6), ios(4.0))
162162
DISPATCH_EXPORT DISPATCH_NONNULL_ALL DISPATCH_NOTHROW
163163
long
164164
dispatch_group_wait(dispatch_group_t group, dispatch_time_t timeout);
@@ -194,7 +194,7 @@ dispatch_group_wait(dispatch_group_t group, dispatch_time_t timeout);
194194
* The block to submit when the group completes.
195195
*/
196196
#ifdef __BLOCKS__
197-
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0)
197+
API_AVAILABLE(macos(10.6), ios(4.0))
198198
DISPATCH_EXPORT DISPATCH_NONNULL_ALL DISPATCH_NOTHROW
199199
void
200200
dispatch_group_notify(dispatch_group_t group,
@@ -224,7 +224,7 @@ dispatch_group_notify(dispatch_group_t group,
224224
* parameter passed to this function is the context provided to
225225
* dispatch_group_notify_f().
226226
*/
227-
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0)
227+
API_AVAILABLE(macos(10.6), ios(4.0))
228228
DISPATCH_EXPORT DISPATCH_NONNULL1 DISPATCH_NONNULL2 DISPATCH_NONNULL4
229229
DISPATCH_NOTHROW
230230
void
@@ -248,7 +248,7 @@ dispatch_group_notify_f(dispatch_group_t group,
248248
* The dispatch group to update.
249249
* The result of passing NULL in this parameter is undefined.
250250
*/
251-
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0)
251+
API_AVAILABLE(macos(10.6), ios(4.0))
252252
DISPATCH_EXPORT DISPATCH_NONNULL_ALL DISPATCH_NOTHROW
253253
void
254254
dispatch_group_enter(dispatch_group_t group);
@@ -267,7 +267,7 @@ dispatch_group_enter(dispatch_group_t group);
267267
* The dispatch group to update.
268268
* The result of passing NULL in this parameter is undefined.
269269
*/
270-
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0)
270+
API_AVAILABLE(macos(10.6), ios(4.0))
271271
DISPATCH_EXPORT DISPATCH_NONNULL_ALL DISPATCH_NOTHROW
272272
void
273273
dispatch_group_leave(dispatch_group_t group);

0 commit comments

Comments
 (0)