Skip to content

Commit 5349e6a

Browse files
committed
use Mutex
1 parent a40e28b commit 5349e6a

File tree

3 files changed

+18
-84
lines changed

3 files changed

+18
-84
lines changed

.github/workflows/build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,15 +124,15 @@ jobs:
124124
- name: Build
125125
run: swift build --swift-sdk aarch64-unknown-linux-android24
126126

127-
windows_swift_6_2:
127+
windows_swift_6_1:
128128
runs-on: windows-latest
129129
steps:
130130
- name: Checkout
131131
uses: actions/checkout@v4
132132
- name: Install Swift
133133
uses: SwiftyLab/setup-swift@latest
134134
with:
135-
swift-version: "6.2.0"
135+
swift-version: "6.1.2"
136136
visual-studio-components: Microsoft.VisualStudio.Component.Windows11SDK.22621
137137
- name: Version
138138
run: swift --version

Sources/IdentifiableContinuation.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@
2929
// SOFTWARE.
3030
//
3131

32+
#if !canImport(Darwin)
33+
34+
import Synchronization
35+
36+
typealias Mutex = Synchronization.Mutex
37+
38+
#endif
39+
3240
#if compiler(>=6.0)
3341
/// Invokes the passed in closure with an `IdentifableContinuation` for the current task.
3442
///

Sources/Mutex.swift renamed to Sources/Mutex+Darwin.swift

Lines changed: 8 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@
2929
// SOFTWARE.
3030
//
3131

32+
#if canImport(Darwin)
33+
34+
import struct os.os_unfair_lock_t
35+
import struct os.os_unfair_lock
36+
import func os.os_unfair_lock_lock
37+
import func os.os_unfair_lock_unlock
38+
import func os.os_unfair_lock_trylock
39+
3240
// Backports the Swift 6 type Mutex<Value> to all Darwin platforms
3341
@usableFromInline
3442
struct Mutex<Value: ~Copyable>: ~Copyable {
@@ -60,14 +68,6 @@ struct Mutex<Value: ~Copyable>: ~Copyable {
6068

6169
extension Mutex: @unchecked Sendable where Value: ~Copyable { }
6270

63-
#if canImport(Darwin)
64-
65-
import struct os.os_unfair_lock_t
66-
import struct os.os_unfair_lock
67-
import func os.os_unfair_lock_lock
68-
import func os.os_unfair_lock_unlock
69-
import func os.os_unfair_lock_trylock
70-
7171
final class Storage<Value: ~Copyable> {
7272
private let _lock: os_unfair_lock_t
7373
var value: Value
@@ -96,78 +96,4 @@ final class Storage<Value: ~Copyable> {
9696
}
9797
}
9898

99-
#elseif canImport(Glibc) || canImport(Musl) || canImport(Bionic)
100-
101-
#if canImport(Musl)
102-
import Musl
103-
#elseif canImport(Bionic)
104-
import Android
105-
#else
106-
import Glibc
107-
#endif
108-
109-
final class Storage<Value: ~Copyable> {
110-
private let _lock: UnsafeMutablePointer<pthread_mutex_t>
111-
112-
var value: Value
113-
114-
init(_ initialValue: consuming Value) {
115-
var attr = pthread_mutexattr_t()
116-
pthread_mutexattr_init(&attr)
117-
self._lock = .allocate(capacity: 1)
118-
let err = pthread_mutex_init(self._lock, &attr)
119-
precondition(err == 0, "pthread_mutex_init error: \(err)")
120-
self.value = initialValue
121-
}
122-
123-
func lock() {
124-
let err = pthread_mutex_lock(_lock)
125-
precondition(err == 0, "pthread_mutex_lock error: \(err)")
126-
}
127-
128-
func unlock() {
129-
let err = pthread_mutex_unlock(_lock)
130-
precondition(err == 0, "pthread_mutex_unlock error: \(err)")
131-
}
132-
133-
func tryLock() -> Bool {
134-
pthread_mutex_trylock(_lock) == 0
135-
}
136-
137-
deinit {
138-
let err = pthread_mutex_destroy(self._lock)
139-
precondition(err == 0, "pthread_mutex_destroy error: \(err)")
140-
self._lock.deallocate()
141-
}
142-
}
143-
144-
#elseif canImport(WinSDK)
145-
146-
import ucrt
147-
import WinSDK
148-
149-
final class Storage<Value> {
150-
private let _lock: UnsafeMutablePointer<SRWLOCK>
151-
152-
var value: Value
153-
154-
init(_ initialValue: Value) {
155-
self._lock = .allocate(capacity: 1)
156-
InitializeSRWLock(self._lock)
157-
self.value = initialValue
158-
}
159-
160-
func lock() {
161-
AcquireSRWLockExclusive(_lock)
162-
}
163-
164-
func unlock() {
165-
ReleaseSRWLockExclusive(_lock)
166-
}
167-
168-
func tryLock() -> Bool {
169-
TryAcquireSRWLockExclusive(_lock) != 0
170-
}
171-
}
172-
17399
#endif

0 commit comments

Comments
 (0)