Skip to content

Commit aac4452

Browse files
committed
libdispatch-1121 merge fixes.
1 parent b1cdf6b commit aac4452

18 files changed

+128
-67
lines changed

dispatch/queue.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -598,7 +598,7 @@ typedef unsigned int dispatch_qos_class_t;
598598
*/
599599
API_AVAILABLE(macos(10.6), ios(4.0))
600600
DISPATCH_EXPORT DISPATCH_CONST DISPATCH_WARN_RESULT DISPATCH_NOTHROW
601-
dispatch_queue_t
601+
dispatch_queue_global_t
602602
dispatch_get_global_queue(intptr_t identifier, uintptr_t flags);
603603

604604
/*!

private/private.h

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

231230
API_AVAILABLE(macos(10.13.2), ios(11.2), tvos(11.2), watchos(4.2))
232231
DISPATCH_EXPORT DISPATCH_WARN_RESULT DISPATCH_NOTHROW

private/workloop_private.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ API_AVAILABLE(macos(10.14), ios(12.0), tvos(12.0), watchos(5.0))
174174
DISPATCH_EXPORT DISPATCH_NONNULL_ALL DISPATCH_NOTHROW
175175
void
176176
dispatch_workloop_set_qos_class_floor(dispatch_workloop_t workloop,
177-
qos_class_t qos, int relpri, dispatch_workloop_param_flags_t flags);
177+
dispatch_qos_class_t qos, int relpri, dispatch_workloop_param_flags_t flags);
178178

179179
/*!
180180
* @function dispatch_workloop_set_scheduler_priority
@@ -273,7 +273,7 @@ API_DEPRECATED_WITH_REPLACEMENT("dispatch_workloop_set_qos_class_floor",
273273
DISPATCH_EXPORT DISPATCH_NONNULL_ALL DISPATCH_NOTHROW
274274
void
275275
dispatch_workloop_set_qos_class(dispatch_workloop_t workloop,
276-
qos_class_t qos, dispatch_workloop_param_flags_t flags);
276+
dispatch_qos_class_t qos, dispatch_workloop_param_flags_t flags);
277277

278278
API_AVAILABLE(macos(10.14), ios(12.0), tvos(12.0), watchos(5.0))
279279
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
@@ -381,9 +381,9 @@ extern const dispatch_source_type_s _dispatch_mach_type_send;
381381
extern const dispatch_source_type_s _dispatch_mach_type_recv;
382382
extern const dispatch_source_type_s _dispatch_mach_type_reply;
383383
extern const dispatch_source_type_s _dispatch_xpc_type_sigterm;
384-
extern const dispatch_source_type_s _dispatch_source_type_timer_with_clock;
385384
#define DISPATCH_MACH_TYPE_WAITER ((const dispatch_source_type_s *)-2)
386385
#endif
386+
extern const dispatch_source_type_s _dispatch_source_type_timer_with_clock;
387387

388388
#pragma mark -
389389
#pragma mark deferred items

src/event/event_kevent.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3043,7 +3043,6 @@ _dispatch_mach_notification_set_armed(dispatch_mach_send_refs_t dmsr)
30433043
(mach_port_name_t)dmn->dmn_kev.ident);
30443044
#endif
30453045
}
3046-
#endif
30473046
}
30483047

30493048
static dispatch_unote_t

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: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ unsigned long volatile _dispatch_queue_serial_numbers =
362362

363363

364364
dispatch_queue_global_t
365-
dispatch_get_global_queue(long priority, unsigned long flags)
365+
dispatch_get_global_queue(intptr_t priority, uintptr_t flags)
366366
{
367367
dispatch_assert(countof(_dispatch_root_queues) ==
368368
DISPATCH_ROOT_QUEUE_COUNT);
@@ -432,6 +432,12 @@ _dispatch_queue_attr_to_info(dispatch_queue_attr_t dqa)
432432

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

@@ -443,7 +449,7 @@ _dispatch_queue_attr_to_info(dispatch_queue_attr_t dqa)
443449
dqai.dqai_concurrent = !(idx % DISPATCH_QUEUE_ATTR_CONCURRENCY_COUNT);
444450
idx /= DISPATCH_QUEUE_ATTR_CONCURRENCY_COUNT;
445451

446-
dqai.dqai_relpri = -(idx % DISPATCH_QUEUE_ATTR_PRIO_COUNT);
452+
dqai.dqai_relpri = -(int)(idx % DISPATCH_QUEUE_ATTR_PRIO_COUNT);
447453
idx /= DISPATCH_QUEUE_ATTR_PRIO_COUNT;
448454

449455
dqai.dqai_qos = idx % DISPATCH_QUEUE_ATTR_QOS_COUNT;
@@ -965,28 +971,30 @@ _dispatch_bug_kevent_client(const char *msg, const char *filter,
965971
dc = du._dr->ds_handler[DS_EVENT_HANDLER];
966972
if (dc) func = _dispatch_continuation_get_function_symbol(dc);
967973
break;
974+
#if HAVE_MACH
968975
case DISPATCH_MACH_CHANNEL_TYPE:
969976
func = du._dmrr->dmrr_handler_func;
970977
break;
978+
#endif // HAVE_MACH
971979
}
972980
filter = dux_type(du._du)->dst_kind;
973981
}
974982

975983
if (operation && err) {
976984
_dispatch_log_fault("LIBDISPATCH_STRICT: _dispatch_bug_kevent_client",
977985
"BUG in libdispatch client: %s %s: \"%s\" - 0x%x "
978-
"{ 0x%llx[%s], ident: %lld / 0x%llx, handler: %p }",
986+
"{ 0x%"PRIx64"[%s], ident: %"PRId64" / 0x%"PRIx64", handler: %p }",
979987
msg, operation, strerror(err), err,
980988
udata, filter, ident, ident, func);
981989
} else if (operation) {
982990
_dispatch_log_fault("LIBDISPATCH_STRICT: _dispatch_bug_kevent_client",
983991
"BUG in libdispatch client: %s %s"
984-
"{ 0x%llx[%s], ident: %lld / 0x%llx, handler: %p }",
992+
"{ 0x%"PRIx64"[%s], ident: %"PRId64" / 0x%"PRIx64", handler: %p }",
985993
msg, operation, udata, filter, ident, ident, func);
986994
} else {
987995
_dispatch_log_fault("LIBDISPATCH_STRICT: _dispatch_bug_kevent_client",
988996
"BUG in libdispatch: %s: \"%s\" - 0x%x"
989-
"{ 0x%llx[%s], ident: %lld / 0x%llx, handler: %p }",
997+
"{ 0x%"PRIx64"[%s], ident: %"PRId64" / 0x%"PRIx64", handler: %p }",
990998
msg, strerror(err), err, udata, filter, ident, ident, func);
991999
}
9921000
}
@@ -1004,9 +1012,11 @@ _dispatch_bug_kevent_vanished(dispatch_unote_t du)
10041012
dc = du._dr->ds_handler[DS_EVENT_HANDLER];
10051013
if (dc) func = _dispatch_continuation_get_function_symbol(dc);
10061014
break;
1015+
#if HAVE_MACH
10071016
case DISPATCH_MACH_CHANNEL_TYPE:
10081017
func = du._dmrr->dmrr_handler_func;
10091018
break;
1019+
#endif // MACH
10101020
}
10111021
_dispatch_log_fault("LIBDISPATCH_STRICT: _dispatch_bug_kevent_vanished",
10121022
"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
@@ -2049,7 +2049,7 @@ _dispatch_set_basepri(dispatch_priority_t dq_dbp)
20492049
_dispatch_thread_setspecific(dispatch_basepri_key, (void*)(uintptr_t)dbp);
20502050
return old_dbp;
20512051
#else
2052-
(void)dbp;
2052+
(void)dq_dbp;
20532053
return 0;
20542054
#endif
20552055
}

src/internal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,7 @@ upcast(dispatch_object_t dou)
318318
#include <io.h>
319319
#include <crtdbg.h>
320320
#endif
321+
#include <inttypes.h>
321322

322323
/* More #includes at EOF (dependent on the contents of internal.h) ... */
323324

src/io.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2272,9 +2272,8 @@ _dispatch_operation_advise(dispatch_operation_t op, size_t chunk_size)
22722272
}
22732273
#else
22742274
#error "_dispatch_operation_advise not implemented on this platform"
2275-
#endif
2276-
#endif
2277-
#endif
2275+
#endif // defined(F_RDADVISE)
2276+
#endif // defined(_WIN32)
22782277
}
22792278

22802279
static int

0 commit comments

Comments
 (0)