File tree 6 files changed +26
-16
lines changed
6 files changed +26
-16
lines changed Original file line number Diff line number Diff line change @@ -26,7 +26,8 @@ let package = Package(
26
26
" ConcurrencyExtras "
27
27
]
28
28
) ,
29
- ]
29
+ ] ,
30
+ swiftLanguageVersions: [ . v6]
30
31
)
31
32
32
33
#if !os(Windows)
Original file line number Diff line number Diff line change @@ -52,16 +52,16 @@ extension AsyncStream {
52
52
/// ```
53
53
///
54
54
/// - Parameter sequence: An async sequence.
55
- public init < S: AsyncSequence > ( _ sequence: S ) where S. Element == Element {
55
+ public init < S: AsyncSequence > ( _ sequence: S ) where S. Element == Element , S : Sendable {
56
56
let lock = NSLock ( )
57
- var iterator : S . AsyncIterator ?
57
+ let iterator = UncheckedBox < S . AsyncIterator ? > ( wrappedValue : nil )
58
58
self . init {
59
59
lock. withLock {
60
- if iterator == nil {
61
- iterator = sequence. makeAsyncIterator ( )
60
+ if iterator. wrappedValue == nil {
61
+ iterator. wrappedValue = sequence. makeAsyncIterator ( )
62
62
}
63
63
}
64
- return try ? await iterator? . next ( )
64
+ return try ? await iterator. wrappedValue ? . next ( )
65
65
}
66
66
}
67
67
@@ -79,7 +79,7 @@ extension AsyncStream {
79
79
extension AsyncSequence {
80
80
/// Erases this async sequence to an async stream that produces elements till this sequence
81
81
/// terminates (or fails).
82
- public func eraseToStream( ) -> AsyncStream < Element > {
82
+ public func eraseToStream( ) -> AsyncStream < Element > where Self : Sendable {
83
83
AsyncStream ( self )
84
84
}
85
85
}
Original file line number Diff line number Diff line change @@ -5,16 +5,16 @@ extension AsyncThrowingStream where Failure == Error {
5
5
/// terminates, rethrowing any failure.
6
6
///
7
7
/// - Parameter sequence: An async sequence.
8
- public init < S: AsyncSequence > ( _ sequence: S ) where S. Element == Element {
8
+ public init < S: AsyncSequence > ( _ sequence: S ) where S. Element == Element , S : Sendable {
9
9
let lock = NSLock ( )
10
- var iterator : S . AsyncIterator ?
10
+ let iterator = UncheckedBox < S . AsyncIterator ? > ( wrappedValue : nil )
11
11
self . init {
12
12
lock. withLock {
13
- if iterator == nil {
14
- iterator = sequence. makeAsyncIterator ( )
13
+ if iterator. wrappedValue == nil {
14
+ iterator. wrappedValue = sequence. makeAsyncIterator ( )
15
15
}
16
16
}
17
- return try await iterator? . next ( )
17
+ return try await iterator. wrappedValue ? . next ( )
18
18
}
19
19
}
20
20
@@ -34,7 +34,7 @@ extension AsyncThrowingStream where Failure == Error {
34
34
extension AsyncSequence {
35
35
/// Erases this async sequence to an async throwing stream that produces elements till this
36
36
/// sequence terminates, rethrowing any error on failure.
37
- public func eraseToThrowingStream( ) -> AsyncThrowingStream < Element , Error > {
37
+ public func eraseToThrowingStream( ) -> AsyncThrowingStream < Element , Error > where Self : Sendable {
38
38
AsyncThrowingStream ( self )
39
39
}
40
40
}
Original file line number Diff line number Diff line change
1
+ final class UncheckedBox < Value> : @unchecked Sendable {
2
+ var wrappedValue : Value
3
+ init ( wrappedValue: Value ) {
4
+ self . wrappedValue = wrappedValue
5
+ }
6
+ }
Original file line number Diff line number Diff line change @@ -93,6 +93,7 @@ extension LockIsolated where Value: Sendable {
93
93
}
94
94
}
95
95
96
+ #if swift(<6)
96
97
@available ( * , deprecated, message: " Lock isolated values should not be equatable " )
97
98
extension LockIsolated : Equatable where Value: Equatable {
98
99
public static func == ( lhs: LockIsolated , rhs: LockIsolated ) -> Bool {
@@ -106,6 +107,7 @@ extension LockIsolated: Hashable where Value: Hashable {
106
107
hasher. combine ( self . value)
107
108
}
108
109
}
110
+ #endif
109
111
110
112
extension NSRecursiveLock {
111
113
@inlinable @discardableResult
Original file line number Diff line number Diff line change 81
81
private typealias Hook = @convention ( thin) ( UnownedJob , Original ) -> Void
82
82
83
83
private var swift_task_enqueueGlobal_hook : Hook ? {
84
- get { _swift_task_enqueueGlobal_hook. pointee }
85
- set { _swift_task_enqueueGlobal_hook. pointee = newValue }
84
+ get { _swift_task_enqueueGlobal_hook. wrappedValue . pointee }
85
+ set { _swift_task_enqueueGlobal_hook. wrappedValue . pointee = newValue }
86
86
}
87
- private let _swift_task_enqueueGlobal_hook : UnsafeMutablePointer < Hook ? > =
87
+ private let _swift_task_enqueueGlobal_hook = UncheckedSendable (
88
88
dlsym ( dlopen ( nil , 0 ) , " swift_task_enqueueGlobal_hook " ) . assumingMemoryBound ( to: Hook ? . self)
89
+ )
89
90
#endif
You can’t perform that action at this time.
0 commit comments