Skip to content

Commit 0fcfb58

Browse files
committed
Merge remote-tracking branch 'origin/main' into rebranch
2 parents be7aa6c + f6f756e commit 0fcfb58

File tree

5 files changed

+30
-1
lines changed

5 files changed

+30
-1
lines changed

stdlib/public/Concurrency/Executor.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ func _checkExpectedExecutor(_filenameStart: Builtin.RawPointer,
9393
_filenameStart, _filenameLength, _filenameIsASCII, _line, _executor)
9494
}
9595

96+
#if !SWIFT_STDLIB_SINGLE_THREADED_RUNTIME
9697
// This must take a DispatchQueueShim, not something like AnyObject,
9798
// or else SILGen will emit a retain/release in unoptimized builds,
9899
// which won't work because DispatchQueues aren't actually
@@ -119,3 +120,4 @@ internal final class DispatchQueueShim: UnsafeSendable, SerialExecutor {
119120
return UnownedSerialExecutor(ordinary: self)
120121
}
121122
}
123+
#endif

stdlib/public/Concurrency/GlobalExecutor.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,15 @@
5959
#include "TaskPrivate.h"
6060
#include "Error.h"
6161

62+
#if !SWIFT_CONCURRENCY_COOPERATIVE_GLOBAL_EXECUTOR
6263
#include <dispatch/dispatch.h>
6364

6465
#if !defined(_WIN32)
6566
#include <dlfcn.h>
6667
#endif
6768

69+
#endif
70+
6871
using namespace swift;
6972

7073
SWIFT_CC(swift)
@@ -180,7 +183,7 @@ void swift::donateThreadToGlobalExecutorUntil(bool (*condition)(void *),
180183
while (!condition(conditionContext)) {
181184
auto job = claimNextFromJobQueue();
182185
if (!job) return;
183-
job->run(ExecutorRef::generic());
186+
swift_job_run(job, ExecutorRef::generic());
184187
}
185188
}
186189

@@ -405,21 +408,35 @@ void swift::swift_task_enqueueMainExecutor(Job *job) {
405408
swift_task_enqueueMainExecutorImpl(job);
406409
}
407410

411+
#if !SWIFT_CONCURRENCY_COOPERATIVE_GLOBAL_EXECUTOR
408412
void swift::swift_task_enqueueOnDispatchQueue(Job *job,
409413
HeapObject *_queue) {
410414
JobPriority priority = job->getPriority();
411415
auto queue = reinterpret_cast<dispatch_queue_t>(_queue);
412416
dispatchEnqueue(queue, job, (dispatch_qos_class_t)priority, queue);
413417
}
418+
#endif
419+
420+
#if SWIFT_CONCURRENCY_COOPERATIVE_GLOBAL_EXECUTOR
421+
static HeapObject _swift_mainExecutorIdentity;
422+
#endif
414423

415424
ExecutorRef swift::swift_task_getMainExecutor() {
425+
#if SWIFT_CONCURRENCY_COOPERATIVE_GLOBAL_EXECUTOR
426+
return ExecutorRef::forOrdinary(&_swift_mainExecutorIdentity, nullptr);
427+
#else
416428
return ExecutorRef::forOrdinary(
417429
reinterpret_cast<HeapObject*>(&_dispatch_main_q),
418430
_swift_task_getDispatchQueueSerialExecutorWitnessTable());
431+
#endif
419432
}
420433

421434
bool ExecutorRef::isMainExecutor() const {
435+
#if SWIFT_CONCURRENCY_COOPERATIVE_GLOBAL_EXECUTOR
436+
return Identity == &_swift_mainExecutorIdentity;
437+
#else
422438
return Identity == reinterpret_cast<HeapObject*>(&_dispatch_main_q);
439+
#endif
423440
}
424441

425442
#define OVERRIDE_GLOBAL_EXECUTOR COMPATIBILITY_OVERRIDE

stdlib/public/Concurrency/Task.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@
2727
#include "Debug.h"
2828
#include "Error.h"
2929

30+
#if !SWIFT_CONCURRENCY_COOPERATIVE_GLOBAL_EXECUTOR
3031
#include <dispatch/dispatch.h>
32+
#endif
3133

3234
#if !defined(_WIN32)
3335
#include <dlfcn.h>
@@ -242,12 +244,16 @@ static void destroyTask(SWIFT_CONTEXT HeapObject *obj) {
242244
}
243245

244246
static ExecutorRef executorForEnqueuedJob(Job *job) {
247+
#if SWIFT_CONCURRENCY_COOPERATIVE_GLOBAL_EXECUTOR
248+
return ExecutorRef::generic();
249+
#else
245250
void *jobQueue = job->SchedulerPrivate[Job::DispatchQueueIndex];
246251
if (jobQueue == DISPATCH_QUEUE_GLOBAL_EXECUTOR)
247252
return ExecutorRef::generic();
248253
else
249254
return ExecutorRef::forOrdinary(reinterpret_cast<HeapObject*>(jobQueue),
250255
_swift_task_getDispatchQueueSerialExecutorWitnessTable());
256+
#endif
251257
}
252258

253259
static void jobInvoke(void *obj, void *unused, uint32_t flags) {

stdlib/public/Concurrency/TaskGroup.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@
3434
#include "queue" // TODO: remove and replace with usage of our mpsc queue
3535
#include <atomic>
3636
#include <assert.h>
37+
#if !SWIFT_CONCURRENCY_COOPERATIVE_GLOBAL_EXECUTOR
3738
#include <dispatch/dispatch.h>
39+
#endif
3840

3941
#if !defined(_WIN32)
4042
#include <dlfcn.h>

stdlib/public/Concurrency/TaskPrivate.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,14 @@ void _swift_tsan_release(void *addr);
112112
/// executors.
113113
#define DISPATCH_QUEUE_GLOBAL_EXECUTOR (void *)1
114114

115+
#if !defined(SWIFT_STDLIB_SINGLE_THREADED_RUNTIME)
115116
inline SerialExecutorWitnessTable *
116117
_swift_task_getDispatchQueueSerialExecutorWitnessTable() {
117118
extern SerialExecutorWitnessTable wtable
118119
SWIFT_ASM_LABEL_WITH_PREFIX("$ss17DispatchQueueShimCScfsWP");
119120
return &wtable;
120121
}
122+
#endif
121123

122124
// ==== ------------------------------------------------------------------------
123125

0 commit comments

Comments
 (0)