Skip to content

Commit ed08858

Browse files
committed
[Concurrency] Fix availability.
Fix up availability after the non-Darwin changes. Also update the ABI baseline. Fix a Win32 typo. rdar://141348916
1 parent f0defd8 commit ed08858

File tree

8 files changed

+142
-29
lines changed

8 files changed

+142
-29
lines changed

stdlib/public/Concurrency/Clock.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ void swift_sleep(
192192
// for sleeps less than 15ms, Windows does a delay koop internally,
193193
// which is acceptable here.
194194
if (dwMsec > 15)
195-
deMsec += 15;
195+
dwMsec += 15;
196196

197197
(void)SleepEx(dwMsec, TRUE);
198198
(void)QueryInterruptTimePrecise(&now);

stdlib/public/Concurrency/CooperativeExecutor.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
import Swift
1414

15+
@available(SwiftStdlib 6.2, *)
1516
extension ExecutorJob {
1617
fileprivate var cooperativeExecutorTimestamp: CooperativeExecutor.Timestamp {
1718
get {
@@ -33,6 +34,7 @@ extension ExecutorJob {
3334

3435
/// A co-operative executor that can be used as the main executor or as a
3536
/// task executor.
37+
@available(SwiftStdlib 6.2, *)
3638
class CooperativeExecutor: Executor, @unchecked Sendable {
3739
var runQueue: PriorityQueue<UnownedJob>
3840
var waitQueue: PriorityQueue<UnownedJob>
@@ -112,6 +114,7 @@ class CooperativeExecutor: Executor, @unchecked Sendable {
112114
public var asSchedulable: any SchedulableExecutor { self }
113115
}
114116

117+
@available(SwiftStdlib 6.2, *)
115118
extension CooperativeExecutor: SchedulableExecutor {
116119
var currentTime: Timestamp {
117120
var now: Timestamp = .zero
@@ -133,6 +136,7 @@ extension CooperativeExecutor: SchedulableExecutor {
133136
}
134137
}
135138

139+
@available(SwiftStdlib 6.2, *)
136140
extension CooperativeExecutor: RunLoopExecutor {
137141
public func run() throws {
138142
try runUntil { false }
@@ -177,8 +181,11 @@ extension CooperativeExecutor: RunLoopExecutor {
177181
}
178182
}
179183

184+
@available(SwiftStdlib 6.2, *)
180185
extension CooperativeExecutor: SerialExecutor {}
181186

187+
@available(SwiftStdlib 6.2, *)
182188
extension CooperativeExecutor: TaskExecutor {}
183189

190+
@available(SwiftStdlib 6.2, *)
184191
extension CooperativeExecutor: MainExecutor {}

stdlib/public/Concurrency/ExecutorBridge.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ void _swift_task_checkIsolatedSwift(HeapObject *executor,
4040
const SerialExecutorWitnessTable *witnessTable);
4141

4242
extern "C" SWIFT_CC(swift)
43-
void _swift_task_isIsolatingCurrentContextSwift(
43+
bool _swift_task_isIsolatingCurrentContextSwift(
4444
HeapObject *executor,
4545
const Metadata *executorType,
4646
const SerialExecutorWitnessTable *witnessTable
@@ -75,7 +75,7 @@ void swift_task_checkIsolatedImpl(SerialExecutorRef executor) {
7575
}
7676

7777
extern "C" SWIFT_CC(swift)
78-
void swift_task_isIsolatingCurrentContextImpl(SerialExecutorRef executor) {
78+
bool swift_task_isIsolatingCurrentContextImpl(SerialExecutorRef executor) {
7979
HeapObject *identity = executor.getIdentity();
8080

8181
// We might be being called with an actor rather than a "proper"

stdlib/public/Concurrency/Task.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1425,8 +1425,7 @@ func getJobFlags(_ task: Builtin.NativeObject) -> JobFlags
14251425
@usableFromInline
14261426
func _enqueueJobGlobal(_ task: Builtin.Job)
14271427

1428-
@available(SwiftStdlib 6.2, *)
1429-
@usableFromInline
1428+
@available(SwiftStdlib 5.9, *)
14301429
func _enqueueJobGlobal(_ task: UnownedJob) {
14311430
_enqueueJobGlobal(task._context)
14321431
}
@@ -1436,8 +1435,7 @@ func _enqueueJobGlobal(_ task: UnownedJob) {
14361435
@usableFromInline
14371436
func _enqueueJobGlobalWithDelay(_ delay: UInt64, _ task: Builtin.Job)
14381437

1439-
@available(SwiftStdlib 6.2, *)
1440-
@usableFromInline
1438+
@available(SwiftStdlib 5.9, *)
14411439
func _enqueueJobGlobalWithDelay(_ delay: UInt64, _ task: UnownedJob) {
14421440
return _enqueueJobGlobalWithDelay(delay, task._context)
14431441
}

stdlib/public/Concurrency/TaskSleep.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -270,12 +270,12 @@ extension Task where Success == Never, Failure == Never {
270270
unsafe onSleepWake(token)
271271
}
272272

273-
let job = ExecutorJob(context:
274-
Builtin.convertTaskToJob(sleepTask))
273+
let job = Builtin.convertTaskToJob(sleepTask)
274+
275275
if #available(SwiftStdlib 6.2, *) {
276276
#if !$Embedded
277277
if let executor = Task.currentSchedulableExecutor {
278-
executor.enqueue(job,
278+
executor.enqueue(ExecutorJob(context: job),
279279
after: .nanoseconds(duration),
280280
clock: .continuous)
281281
return
@@ -285,7 +285,7 @@ extension Task where Success == Never, Failure == Never {
285285

286286
// If there is no current schedulable executor, fall back to
287287
// _enqueueJobGlobalWithDelay()
288-
_enqueueJobGlobalWithDelay(duration, UnownedJob(job))
288+
_enqueueJobGlobalWithDelay(duration, job)
289289
return
290290

291291
case .activeContinuation, .finished:

stdlib/public/Concurrency/TaskSleepDuration.swift

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,14 @@ import Swift
1616
fileprivate func timestamp<C: Clock>(for instant: C.Instant, clock: C)
1717
-> (clockID: _ClockID, seconds: Int64, nanoseconds: Int64) {
1818
var clockID: _ClockID
19-
if clock.traits.contains(.continuous) {
20-
clockID = .continuous
19+
if #available(SwiftStdlib 6.2, *) {
20+
if clock.traits.contains(.continuous) {
21+
clockID = .continuous
22+
} else {
23+
clockID = .suspending
24+
}
2125
} else {
22-
clockID = .suspending
26+
Builtin.unreachable()
2327
}
2428

2529
var seconds: Int64 = 0
@@ -28,7 +32,13 @@ fileprivate func timestamp<C: Clock>(for instant: C.Instant, clock: C)
2832
nanoseconds: &nanoseconds,
2933
clock: clockID.rawValue)
3034

31-
let delta = clock.convert(from: clock.now.duration(to: instant))!
35+
let delta: Swift.Duration
36+
if #available(SwiftStdlib 6.2, *) {
37+
delta = clock.convert(from: clock.now.duration(to: instant))!
38+
} else {
39+
Builtin.unreachable()
40+
}
41+
3242
let (deltaSeconds, deltaAttoseconds) = delta.components
3343
let deltaNanoseconds = deltaAttoseconds / 1_000_000_000
3444
seconds += deltaSeconds
@@ -84,18 +94,20 @@ extension Task where Success == Never, Failure == Never {
8494
unsafe onSleepWake(token)
8595
}
8696

87-
let job = ExecutorJob(context: Builtin.convertTaskToJob(sleepTask))
97+
let job = Builtin.convertTaskToJob(sleepTask)
8898

8999
if #available(SwiftStdlib 6.2, *) {
90100
#if !$Embedded
91101
if let executor = Task.currentSchedulableExecutor {
92-
executor.enqueue(job,
102+
executor.enqueue(ExecutorJob(context: job),
93103
at: instant,
94104
tolerance: tolerance,
95105
clock: clock)
96106
return
97107
}
98108
#endif
109+
} else {
110+
Builtin.unreachable()
99111
}
100112

101113
// If there is no current schedulable executor, fall back to
@@ -104,19 +116,27 @@ extension Task where Success == Never, Failure == Never {
104116
clock: clock)
105117
let toleranceSeconds: Int64
106118
let toleranceNanoseconds: Int64
107-
if let tolerance = tolerance,
108-
let components = clock.convert(from: tolerance)?.components {
109-
toleranceSeconds = components.seconds
110-
toleranceNanoseconds = components.attoseconds / 1_000_000_000
119+
if #available(SwiftStdlib 6.2, *) {
120+
if let tolerance = tolerance,
121+
let components = clock.convert(from: tolerance)?.components {
122+
toleranceSeconds = components.seconds
123+
toleranceNanoseconds = components.attoseconds / 1_000_000_000
124+
} else {
125+
toleranceSeconds = 0
126+
toleranceNanoseconds = -1
127+
}
111128
} else {
112-
toleranceSeconds = 0
113-
toleranceNanoseconds = -1
129+
Builtin.unreachable()
114130
}
115131

116-
_enqueueJobGlobalWithDeadline(
132+
if #available(SwiftStdlib 5.9, *) {
133+
_enqueueJobGlobalWithDeadline(
117134
seconds, nanoseconds,
118135
toleranceSeconds, toleranceNanoseconds,
119-
clockID.rawValue, UnownedJob(job))
136+
clockID.rawValue, UnownedJob(context: job))
137+
} else {
138+
Builtin.unreachable()
139+
}
120140
return
121141

122142
case .activeContinuation, .finished:

test/abi/Inputs/macOS/arm64/concurrency/baseline-asserts

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -605,7 +605,51 @@ _$ss16AsyncMapSequenceVMa
605605
_$ss16AsyncMapSequenceVMn
606606
_$ss16AsyncMapSequenceV_9transformAByxq_Gx_q_7ElementQzYactcfC
607607
_$ss16AsyncMapSequenceVyxq_GScisMc
608-
_$ss17_enqueueJobGlobalyyScJF
608+
_$ss17DummyMainExecutorC02isbC0Sbvg
609+
_$ss17DummyMainExecutorC02isbC0SbvpMV
610+
_$ss17DummyMainExecutorC13checkIsolatedyyF
611+
_$ss17DummyMainExecutorC3runyyKF
612+
_$ss17DummyMainExecutorC4stopyyF
613+
_$ss17DummyMainExecutorC7enqueueyys0C3JobVnF
614+
_$ss17DummyMainExecutorCABycfC
615+
_$ss17DummyMainExecutorCABycfCTj
616+
_$ss17DummyMainExecutorCABycfCTq
617+
_$ss17DummyMainExecutorCABycfc
618+
_$ss17DummyMainExecutorCMa
619+
_$ss17DummyMainExecutorCMm
620+
_$ss17DummyMainExecutorCMn
621+
_$ss17DummyMainExecutorCMo
622+
_$ss17DummyMainExecutorCMu
623+
_$ss17DummyMainExecutorCN
624+
_$ss17DummyMainExecutorCScFsMc
625+
_$ss17DummyMainExecutorCScFsWP
626+
_$ss17DummyMainExecutorCScfsMc
627+
_$ss17DummyMainExecutorCScfsWP
628+
_$ss17DummyMainExecutorCfD
629+
_$ss17DummyMainExecutorCfd
630+
_$ss17DummyMainExecutorCs07RunLoopC0sMc
631+
_$ss17DummyMainExecutorCs07RunLoopC0sWP
632+
_$ss17DummyMainExecutorCs0bC0sMc
633+
_$ss17DummyMainExecutorCs0bC0sWP
634+
_$ss17DummyTaskExecutorC06isMainC0Sbvg
635+
_$ss17DummyTaskExecutorC06isMainC0SbvpMV
636+
_$ss17DummyTaskExecutorC7enqueueyys0C3JobVnF
637+
_$ss17DummyTaskExecutorCABycfC
638+
_$ss17DummyTaskExecutorCABycfCTj
639+
_$ss17DummyTaskExecutorCABycfCTq
640+
_$ss17DummyTaskExecutorCABycfc
641+
_$ss17DummyTaskExecutorCMa
642+
_$ss17DummyTaskExecutorCMm
643+
_$ss17DummyTaskExecutorCMn
644+
_$ss17DummyTaskExecutorCMo
645+
_$ss17DummyTaskExecutorCMu
646+
_$ss17DummyTaskExecutorCN
647+
_$ss17DummyTaskExecutorCScFsMc
648+
_$ss17DummyTaskExecutorCScFsWP
649+
_$ss17DummyTaskExecutorCSchsMc
650+
_$ss17DummyTaskExecutorCSchsWP
651+
_$ss17DummyTaskExecutorCfD
652+
_$ss17DummyTaskExecutorCfd
609653
_$ss19AsyncFilterSequenceV04makeA8IteratorAB0E0Vyx_GyF
610654
_$ss19AsyncFilterSequenceV10isIncludedySb7ElementQzYacvg
611655
_$ss19AsyncFilterSequenceV10isIncludedySb7ElementQzYacvpMV
@@ -896,7 +940,6 @@ _$ss26DispatchGlobalTaskExecutorCfD
896940
_$ss26DispatchGlobalTaskExecutorCfd
897941
_$ss26DispatchGlobalTaskExecutorCs011SchedulableD0sMc
898942
_$ss26DispatchGlobalTaskExecutorCs011SchedulableD0sWP
899-
_$ss26_enqueueJobGlobalWithDelayyys6UInt64V_ScJtF
900943
_$ss27AsyncThrowingFilterSequenceV04makeA8IteratorAB0F0Vyx_GyF
901944
_$ss27AsyncThrowingFilterSequenceV10isIncludedySb7ElementQzYaKcvg
902945
_$ss27AsyncThrowingFilterSequenceV10isIncludedySb7ElementQzYaKcvpMV
@@ -1158,6 +1201,7 @@ _swift_job_allocate
11581201
_swift_job_deallocate
11591202
_swift_job_run
11601203
_swift_nonDefaultDistributedActor_initialize
1204+
_swift_sleep
11611205
_swift_taskGroup_addPending
11621206
_swift_taskGroup_attachChild
11631207
_swift_taskGroup_cancelAll

test/abi/Inputs/macOS/x86_64/concurrency/baseline-asserts

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -605,7 +605,51 @@ _$ss16AsyncMapSequenceVMa
605605
_$ss16AsyncMapSequenceVMn
606606
_$ss16AsyncMapSequenceV_9transformAByxq_Gx_q_7ElementQzYactcfC
607607
_$ss16AsyncMapSequenceVyxq_GScisMc
608-
_$ss17_enqueueJobGlobalyyScJF
608+
_$ss17DummyMainExecutorC02isbC0Sbvg
609+
_$ss17DummyMainExecutorC02isbC0SbvpMV
610+
_$ss17DummyMainExecutorC13checkIsolatedyyF
611+
_$ss17DummyMainExecutorC3runyyKF
612+
_$ss17DummyMainExecutorC4stopyyF
613+
_$ss17DummyMainExecutorC7enqueueyys0C3JobVnF
614+
_$ss17DummyMainExecutorCABycfC
615+
_$ss17DummyMainExecutorCABycfCTj
616+
_$ss17DummyMainExecutorCABycfCTq
617+
_$ss17DummyMainExecutorCABycfc
618+
_$ss17DummyMainExecutorCMa
619+
_$ss17DummyMainExecutorCMm
620+
_$ss17DummyMainExecutorCMn
621+
_$ss17DummyMainExecutorCMo
622+
_$ss17DummyMainExecutorCMu
623+
_$ss17DummyMainExecutorCN
624+
_$ss17DummyMainExecutorCScFsMc
625+
_$ss17DummyMainExecutorCScFsWP
626+
_$ss17DummyMainExecutorCScfsMc
627+
_$ss17DummyMainExecutorCScfsWP
628+
_$ss17DummyMainExecutorCfD
629+
_$ss17DummyMainExecutorCfd
630+
_$ss17DummyMainExecutorCs07RunLoopC0sMc
631+
_$ss17DummyMainExecutorCs07RunLoopC0sWP
632+
_$ss17DummyMainExecutorCs0bC0sMc
633+
_$ss17DummyMainExecutorCs0bC0sWP
634+
_$ss17DummyTaskExecutorC06isMainC0Sbvg
635+
_$ss17DummyTaskExecutorC06isMainC0SbvpMV
636+
_$ss17DummyTaskExecutorC7enqueueyys0C3JobVnF
637+
_$ss17DummyTaskExecutorCABycfC
638+
_$ss17DummyTaskExecutorCABycfCTj
639+
_$ss17DummyTaskExecutorCABycfCTq
640+
_$ss17DummyTaskExecutorCABycfc
641+
_$ss17DummyTaskExecutorCMa
642+
_$ss17DummyTaskExecutorCMm
643+
_$ss17DummyTaskExecutorCMn
644+
_$ss17DummyTaskExecutorCMo
645+
_$ss17DummyTaskExecutorCMu
646+
_$ss17DummyTaskExecutorCN
647+
_$ss17DummyTaskExecutorCScFsMc
648+
_$ss17DummyTaskExecutorCScFsWP
649+
_$ss17DummyTaskExecutorCSchsMc
650+
_$ss17DummyTaskExecutorCSchsWP
651+
_$ss17DummyTaskExecutorCfD
652+
_$ss17DummyTaskExecutorCfd
609653
_$ss19AsyncFilterSequenceV04makeA8IteratorAB0E0Vyx_GyF
610654
_$ss19AsyncFilterSequenceV10isIncludedySb7ElementQzYacvg
611655
_$ss19AsyncFilterSequenceV10isIncludedySb7ElementQzYacvpMV
@@ -896,7 +940,6 @@ _$ss26DispatchGlobalTaskExecutorCfD
896940
_$ss26DispatchGlobalTaskExecutorCfd
897941
_$ss26DispatchGlobalTaskExecutorCs011SchedulableD0sMc
898942
_$ss26DispatchGlobalTaskExecutorCs011SchedulableD0sWP
899-
_$ss26_enqueueJobGlobalWithDelayyys6UInt64V_ScJtF
900943
_$ss27AsyncThrowingFilterSequenceV04makeA8IteratorAB0F0Vyx_GyF
901944
_$ss27AsyncThrowingFilterSequenceV10isIncludedySb7ElementQzYaKcvg
902945
_$ss27AsyncThrowingFilterSequenceV10isIncludedySb7ElementQzYaKcvpMV
@@ -1158,6 +1201,7 @@ _swift_job_allocate
11581201
_swift_job_deallocate
11591202
_swift_job_run
11601203
_swift_nonDefaultDistributedActor_initialize
1204+
_swift_sleep
11611205
_swift_taskGroup_addPending
11621206
_swift_taskGroup_attachChild
11631207
_swift_taskGroup_cancelAll

0 commit comments

Comments
 (0)