Skip to content

Commit 9c1b616

Browse files
ktopley-applerokhinip
authored andcommitted
libdispatch-1121 merge fixes.
Signed-off-by: Kim Topley <ktopley@apple.com>
1 parent 01aa2f3 commit 9c1b616

17 files changed

+132
-59
lines changed

private/private.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,6 @@ API_AVAILABLE(macos(10.9), ios(7.0))
227227
DISPATCH_EXPORT DISPATCH_WARN_RESULT DISPATCH_NOTHROW
228228
dispatch_runloop_handle_t
229229
_dispatch_runloop_root_queue_get_port_4CF(dispatch_queue_t queue);
230-
#endif
231230

232231
#if TARGET_OS_MAC
233232
API_AVAILABLE(macos(10.13.2), ios(11.2), tvos(11.2), watchos(4.2))

private/workloop_private.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ API_AVAILABLE(macos(10.14), ios(12.0), tvos(12.0), watchos(5.0))
7373
DISPATCH_EXPORT DISPATCH_NONNULL_ALL DISPATCH_NOTHROW
7474
void
7575
dispatch_workloop_set_qos_class_floor(dispatch_workloop_t workloop,
76-
qos_class_t qos, int relpri, dispatch_workloop_param_flags_t flags);
76+
dispatch_qos_class_t qos, int relpri, dispatch_workloop_param_flags_t flags);
7777

7878
/*!
7979
* @function dispatch_workloop_set_scheduler_priority
@@ -172,7 +172,7 @@ API_DEPRECATED_WITH_REPLACEMENT("dispatch_workloop_set_qos_class_floor",
172172
DISPATCH_EXPORT DISPATCH_NONNULL_ALL DISPATCH_NOTHROW
173173
void
174174
dispatch_workloop_set_qos_class(dispatch_workloop_t workloop,
175-
qos_class_t qos, dispatch_workloop_param_flags_t flags);
175+
dispatch_qos_class_t qos, dispatch_workloop_param_flags_t flags);
176176

177177
API_AVAILABLE(macos(10.14), ios(12.0), tvos(12.0), watchos(5.0))
178178
DISPATCH_EXPORT DISPATCH_NOTHROW

src/event/event_epoll.c

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,6 @@ _dispatch_unote_register_muxed(dispatch_unote_t du)
260260
uint32_t events;
261261

262262
events = _dispatch_unote_required_events(du);
263-
du._du->du_priority = pri;
264263

265264
dmb = _dispatch_unote_muxnote_bucket(du);
266265
dmn = _dispatch_unote_muxnote_find(dmb, du);
@@ -429,16 +428,18 @@ _dispatch_timeout_program(uint32_t tidx, uint64_t target,
429428
}
430429

431430
void
432-
_dispatch_event_loop_timer_arm(dispatch_timer_heap_t dth, uint32_t tidx,
433-
dispatch_timer_delay_s range, dispatch_clock_now_cache_t nows)
431+
_dispatch_event_loop_timer_arm(dispatch_timer_heap_t dth DISPATCH_UNUSED,
432+
uint32_t tidx, dispatch_timer_delay_s range,
433+
dispatch_clock_now_cache_t nows)
434434
{
435435
dispatch_clock_t clock = DISPATCH_TIMER_CLOCK(tidx);
436436
uint64_t target = range.delay + _dispatch_time_now_cached(clock, nows);
437437
_dispatch_timeout_program(tidx, target, range.leeway);
438438
}
439439

440440
void
441-
_dispatch_event_loop_timer_delete(dispatch_timer_heap_t dth, uint32_t tidx)
441+
_dispatch_event_loop_timer_delete(dispatch_timer_heap_t dth DISPATCH_UNUSED,
442+
uint32_t tidx)
442443
{
443444
_dispatch_timeout_program(tidx, UINT64_MAX, UINT64_MAX);
444445
}
@@ -510,7 +511,7 @@ _dispatch_event_merge_signal(dispatch_muxnote_t dmn)
510511
// consumed by dux_merge_evt()
511512
_dispatch_retain_unote_owner(du);
512513
dispatch_assert(!dux_needs_rearm(du._du));
513-
os_atomic_store2o(du._dr, ds_pending_data, 1, relaxed)
514+
os_atomic_store2o(du._dr, ds_pending_data, 1, relaxed);
514515
dux_merge_evt(du._du, EV_ADD|EV_ENABLE|EV_CLEAR, 1, 0);
515516
}
516517
} else {
@@ -564,8 +565,8 @@ _dispatch_event_merge_fd(dispatch_muxnote_t dmn, uint32_t events)
564565
_dispatch_retain_unote_owner(du);
565566
dispatch_assert(dux_needs_rearm(du._du));
566567
_dispatch_unote_state_clear_bit(du, DU_STATE_ARMED);
567-
os_atomic_store2o(du._dr, ds_pending_data, ~data, relaxed)
568-
dux_merge_evt(du._du, EV_ADD|EV_ENABLE|EV_DISPATCH, data, 0, 0);
568+
os_atomic_store2o(du._dr, ds_pending_data, ~data, relaxed);
569+
dux_merge_evt(du._du, EV_ADD|EV_ENABLE|EV_DISPATCH, data, 0);
569570
}
570571
}
571572

@@ -577,8 +578,8 @@ _dispatch_event_merge_fd(dispatch_muxnote_t dmn, uint32_t events)
577578
_dispatch_retain_unote_owner(du);
578579
dispatch_assert(dux_needs_rearm(du._du));
579580
_dispatch_unote_state_clear_bit(du, DU_STATE_ARMED);
580-
os_atomic_store2o(du._dr, ds_pending_data, ~data, relaxed)
581-
dux_merge_evt(du._du, EV_ADD|EV_ENABLE|EV_DISPATCH, data, 0, 0);
581+
os_atomic_store2o(du._dr, ds_pending_data, ~data, relaxed);
582+
dux_merge_evt(du._du, EV_ADD|EV_ENABLE|EV_DISPATCH, data, 0);
582583
}
583584
}
584585

@@ -628,10 +629,14 @@ _dispatch_event_loop_drain(uint32_t flags)
628629
_dispatch_event_merge_timer(DISPATCH_CLOCK_WALL);
629630
break;
630631

631-
case DISPATCH_EPOLL_CLOCK_MACH:
632+
case DISPATCH_EPOLL_CLOCK_UPTIME:
632633
_dispatch_event_merge_timer(DISPATCH_CLOCK_UPTIME);
633634
break;
634635

636+
case DISPATCH_EPOLL_CLOCK_MONOTONIC:
637+
_dispatch_event_merge_timer(DISPATCH_CLOCK_MONOTONIC);
638+
break;
639+
635640
default:
636641
dmn = ev[i].data.ptr;
637642
switch (dmn->dmn_filter) {

src/event/event_internal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,9 +382,9 @@ extern const dispatch_source_type_s _dispatch_mach_type_send;
382382
extern const dispatch_source_type_s _dispatch_mach_type_recv;
383383
extern const dispatch_source_type_s _dispatch_mach_type_reply;
384384
extern const dispatch_source_type_s _dispatch_xpc_type_sigterm;
385-
extern const dispatch_source_type_s _dispatch_source_type_timer_with_clock;
386385
#define DISPATCH_MACH_TYPE_WAITER ((const dispatch_source_type_s *)-2)
387386
#endif
387+
extern const dispatch_source_type_s _dispatch_source_type_timer_with_clock;
388388

389389
#pragma mark -
390390
#pragma mark deferred items

src/event/workqueue.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ _dispatch_workq_monitor_pools(void *context DISPATCH_UNUSED)
218218
int32_t floor = mon->target_runnable - WORKQ_MAX_TRACKED_TIDS;
219219
_dispatch_debug("workq: %s has no runnable workers; poking with floor %d",
220220
dq->dq_label, floor);
221-
_dispatch_global_queue_poke(dq, 1, floor);
221+
_dispatch_root_queue_poke(dq, 1, floor);
222222
global_runnable += 1; // account for poke in global estimate
223223
} else if (mon->num_runnable < mon->target_runnable &&
224224
global_runnable < global_soft_max) {
@@ -231,7 +231,7 @@ _dispatch_workq_monitor_pools(void *context DISPATCH_UNUSED)
231231
floor = MAX(floor, floor2);
232232
_dispatch_debug("workq: %s under utilization target; poking with floor %d",
233233
dq->dq_label, floor);
234-
_dispatch_global_queue_poke(dq, 1, floor);
234+
_dispatch_root_queue_poke(dq, 1, floor);
235235
global_runnable += 1; // account for poke in global estimate
236236
}
237237
}
@@ -245,15 +245,15 @@ _dispatch_workq_init_once(void *context DISPATCH_UNUSED)
245245
int i, target_runnable = (int)dispatch_hw_config(active_cpus);
246246
foreach_qos_bucket_reverse(i) {
247247
dispatch_workq_monitor_t mon = &_dispatch_workq_monitors[i];
248-
mon->dq = _dispatch_get_root_queue(i, false);
248+
mon->dq = _dispatch_get_root_queue(DISPATCH_QOS_FOR_BUCKET(i), false);
249249
void *buf = _dispatch_calloc(WORKQ_MAX_TRACKED_TIDS, sizeof(dispatch_tid));
250250
mon->registered_tids = buf;
251251
mon->target_runnable = target_runnable;
252252
}
253253

254254
// Create monitoring timer that will periodically run on dispatch_mgr_q
255255
dispatch_source_t ds = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,
256-
0, 0, &_dispatch_mgr_q);
256+
0, 0, _dispatch_mgr_q._as_dq);
257257
dispatch_source_set_timer(ds, dispatch_time(DISPATCH_TIME_NOW, 0),
258258
NSEC_PER_SEC, 0);
259259
dispatch_source_set_event_handler_f(ds, _dispatch_workq_monitor_pools);

src/init.c

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,12 @@ _dispatch_queue_attr_to_info(dispatch_queue_attr_t dqa)
431431

432432
if (dqa < _dispatch_queue_attrs ||
433433
dqa >= &_dispatch_queue_attrs[DISPATCH_QUEUE_ATTR_COUNT]) {
434+
#ifndef __APPLE__
435+
if (memcmp(dqa, &_dispatch_queue_attrs[0],
436+
sizeof(struct dispatch_queue_attr_s)) == 0) {
437+
dqa = (dispatch_queue_attr_t)&_dispatch_queue_attrs[0];
438+
} else
439+
#endif // __APPLE__
434440
DISPATCH_CLIENT_CRASH(dqa->do_vtable, "Invalid queue attribute");
435441
}
436442

@@ -974,28 +980,30 @@ _dispatch_bug_kevent_client(const char *msg, const char *filter,
974980
dc = du._dr->ds_handler[DS_EVENT_HANDLER];
975981
if (dc) func = _dispatch_continuation_get_function_symbol(dc);
976982
break;
983+
#if HAVE_MACH
977984
case DISPATCH_MACH_CHANNEL_TYPE:
978985
func = du._dmrr->dmrr_handler_func;
979986
break;
987+
#endif // HAVE_MACH
980988
}
981989
filter = dux_type(du._du)->dst_kind;
982990
}
983991

984992
if (operation && err) {
985993
_dispatch_log_fault("LIBDISPATCH_STRICT: _dispatch_bug_kevent_client",
986994
"BUG in libdispatch client: %s %s: \"%s\" - 0x%x "
987-
"{ 0x%llx[%s], ident: %lld / 0x%llx, handler: %p }",
995+
"{ 0x%"PRIx64"[%s], ident: %"PRId64" / 0x%"PRIx64", handler: %p }",
988996
msg, operation, strerror(err), err,
989997
udata, filter, ident, ident, func);
990998
} else if (operation) {
991999
_dispatch_log_fault("LIBDISPATCH_STRICT: _dispatch_bug_kevent_client",
9921000
"BUG in libdispatch client: %s %s"
993-
"{ 0x%llx[%s], ident: %lld / 0x%llx, handler: %p }",
1001+
"{ 0x%"PRIx64"[%s], ident: %"PRId64" / 0x%"PRIx64", handler: %p }",
9941002
msg, operation, udata, filter, ident, ident, func);
9951003
} else {
9961004
_dispatch_log_fault("LIBDISPATCH_STRICT: _dispatch_bug_kevent_client",
9971005
"BUG in libdispatch: %s: \"%s\" - 0x%x"
998-
"{ 0x%llx[%s], ident: %lld / 0x%llx, handler: %p }",
1006+
"{ 0x%"PRIx64"[%s], ident: %"PRId64" / 0x%"PRIx64", handler: %p }",
9991007
msg, strerror(err), err, udata, filter, ident, ident, func);
10001008
}
10011009
}
@@ -1013,9 +1021,11 @@ _dispatch_bug_kevent_vanished(dispatch_unote_t du)
10131021
dc = du._dr->ds_handler[DS_EVENT_HANDLER];
10141022
if (dc) func = _dispatch_continuation_get_function_symbol(dc);
10151023
break;
1024+
#if HAVE_MACH
10161025
case DISPATCH_MACH_CHANNEL_TYPE:
10171026
func = du._dmrr->dmrr_handler_func;
10181027
break;
1028+
#endif // MACH
10191029
}
10201030
_dispatch_log_fault("LIBDISPATCH_STRICT: _dispatch_bug_kevent_vanished",
10211031
"BUG in libdispatch client: %s, monitored resource vanished before "

src/inline_internal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2081,7 +2081,7 @@ _dispatch_set_basepri(dispatch_priority_t dq_dbp)
20812081
_dispatch_thread_setspecific(dispatch_basepri_key, (void*)(uintptr_t)dbp);
20822082
return old_dbp;
20832083
#else
2084-
(void)dbp;
2084+
(void)dq_dbp;
20852085
return 0;
20862086
#endif
20872087
}

src/internal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,7 @@ upcast(dispatch_object_t dou)
327327
#include <io.h>
328328
#include <crtdbg.h>
329329
#endif
330+
#include <inttypes.h>
330331

331332
#if __has_include(<os/atomic_private.h>)
332333
#include <os/atomic_private.h>

src/io.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2267,8 +2267,8 @@ _dispatch_operation_advise(dispatch_operation_t op, size_t chunk_size)
22672267
}
22682268
#else
22692269
#error "_dispatch_operation_advise not implemented on this platform"
2270-
#endif
2271-
#endif
2270+
#endif // defined(F_RDADVISE)
2271+
#endif // defined(_WIN32)
22722272
}
22732273

22742274
static int

src/queue.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,10 +204,12 @@ _dispatch_set_priority_and_voucher_slow(pthread_priority_t priority,
204204

205205
static void _dispatch_async_redirect_invoke(dispatch_continuation_t dc,
206206
dispatch_invoke_context_t dic, dispatch_invoke_flags_t flags);
207+
#if HAVE_PTHREAD_WORKQUEUE_QOS
207208
static void _dispatch_queue_override_invoke(dispatch_continuation_t dc,
208209
dispatch_invoke_context_t dic, dispatch_invoke_flags_t flags);
209210
static void _dispatch_workloop_stealer_invoke(dispatch_continuation_t dc,
210211
dispatch_invoke_context_t dic, dispatch_invoke_flags_t flags);
212+
#endif // HAVE_PTHREAD_WORKQUEUE_QOS
211213

212214
const struct dispatch_continuation_vtable_s _dispatch_continuation_vtables[] = {
213215
DC_VTABLE_ENTRY(ASYNC_REDIRECT,
@@ -898,7 +900,6 @@ dispatch_async(dispatch_queue_t dq, dispatch_block_t work)
898900
qos = _dispatch_continuation_init(dc, dq, work, 0, dc_flags);
899901
_dispatch_continuation_async(dq, dc, qos, dc->dc_flags);
900902
}
901-
#endif
902903

903904
#pragma mark -
904905
#pragma mark _dispatch_sync_invoke / _dispatch_sync_complete
@@ -3558,6 +3559,7 @@ _dispatch_queue_drain_should_narrow_slow(uint64_t now,
35583559
dispatch_assert_zero(rv);
35593560
}
35603561
}
3562+
#endif // TARGET_OS_MAC
35613563
pthread_attr_destroy(&attr);
35623564
}
35633565

@@ -3602,10 +3604,12 @@ _dispatch_workloop_dispose(dispatch_workloop_t dwl, bool *allow_free)
36023604
dwl->dwl_timer_heap = NULL;
36033605
}
36043606

3607+
#if TARGET_OS_MAC
36053608
if (dwl->dwl_attr && (dwl->dwl_attr->dwla_flags &
36063609
DISPATCH_WORKLOOP_ATTR_NEEDS_DESTROY)) {
36073610
(void)dispatch_assume_zero(_pthread_workloop_destroy((uint64_t)dwl));
36083611
}
3612+
#endif // TARGET_OS_MAC
36093613
_dispatch_workloop_attributes_dispose(dwl);
36103614
_dispatch_queue_dispose(dwl, allow_free);
36113615
}
@@ -3660,11 +3664,13 @@ _dispatch_workloop_try_lower_max_qos(dispatch_workloop_t dwl,
36603664
new_state |= qos_bits;
36613665
});
36623666

3667+
#if DISPATCH_USE_KEVENT_WORKQUEUE
36633668
dispatch_deferred_items_t ddi = _dispatch_deferred_items_get();
36643669
if (likely(ddi)) {
36653670
ddi->ddi_wlh_needs_update = true;
36663671
_dispatch_return_to_kernel();
36673672
}
3673+
#endif // DISPATCH_USE_KEVENT_WORKQUEUE
36683674
return true;
36693675
}
36703676

@@ -5188,6 +5194,7 @@ _dispatch_queue_mgr_lock(struct dispatch_queue_static_s *dq)
51885194
});
51895195
}
51905196

5197+
#if DISPATCH_USE_KEVENT_WORKQUEUE
51915198
DISPATCH_ALWAYS_INLINE
51925199
static inline bool
51935200
_dispatch_queue_mgr_unlock(struct dispatch_queue_static_s *dq)
@@ -5200,6 +5207,7 @@ _dispatch_queue_mgr_unlock(struct dispatch_queue_static_s *dq)
52005207
});
52015208
return _dq_state_is_dirty(old_state);
52025209
}
5210+
#endif // DISPATCH_USE_KEVENT_WORKQUEUE
52035211

52045212
static void
52055213
_dispatch_mgr_queue_drain(void)
@@ -5812,7 +5820,6 @@ _dispatch_root_queue_drain_one(dispatch_queue_global_t dq)
58125820
return head;
58135821
}
58145822

5815-
#if DISPATCH_USE_KEVENT_WORKQUEUE
58165823
static void
58175824
_dispatch_root_queue_drain_deferred_wlh(dispatch_deferred_items_t ddi
58185825
DISPATCH_PERF_MON_ARGS_PROTO)
@@ -7332,7 +7339,6 @@ libdispatch_tsd_init(void)
73327339
#endif // defined(_WIN32)
73337340
__dispatch_tsd.tid = gettid();
73347341
}
7335-
#endif
73367342

73377343
DISPATCH_NOTHROW
73387344
void
@@ -7370,6 +7376,7 @@ _dispatch_fork_becomes_unsafe_slow(void)
73707376
DISPATCH_CLIENT_CRASH(0, "Transition to multithreaded is prohibited");
73717377
}
73727378
}
7379+
#endif // TARGET_OS_MAC
73737380

73747381
DISPATCH_NOINLINE
73757382
void

src/semaphore.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ _dispatch_group_debug(dispatch_object_t dou, char *buf, size_t bufsiz)
198198
_dispatch_object_class_name(dg), dg);
199199
offset += _dispatch_object_debug_attr(dg, &buf[offset], bufsiz - offset);
200200
offset += dsnprintf(&buf[offset], bufsiz - offset,
201-
"count = %"PRIu32", gen = %"PRIu32", waiters = %d, notifs = %d }",
201+
"count = %u, gen = %d, waiters = %d, notifs = %d }",
202202
_dg_state_value(dg_state), _dg_state_gen(dg_state),
203203
(bool)(dg_state & DISPATCH_GROUP_HAS_WAITERS),
204204
(bool)(dg_state & DISPATCH_GROUP_HAS_NOTIFS));

0 commit comments

Comments
 (0)