Skip to content

Commit 3c67f9e

Browse files
committed
Use Bionic module from new Android overlay in Swift 6 instead
The new module and overlay were merged into Swift 6 in swiftlang/swift#74758.
1 parent 6ae9a05 commit 3c67f9e

File tree

2 files changed

+18
-9
lines changed

2 files changed

+18
-9
lines changed

Sources/AsyncAlgorithms/Locking.swift

+7-5
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@ import Darwin
1515
import Glibc
1616
#elseif canImport(WinSDK)
1717
import WinSDK
18+
#elseif canImport(Bionic)
19+
import Bionic
1820
#endif
1921

2022
internal struct Lock {
2123
#if canImport(Darwin)
2224
typealias Primitive = os_unfair_lock
23-
#elseif canImport(Glibc)
25+
#elseif canImport(Glibc) || canImport(Bionic)
2426
typealias Primitive = pthread_mutex_t
2527
#elseif canImport(WinSDK)
2628
typealias Primitive = SRWLOCK
@@ -38,7 +40,7 @@ internal struct Lock {
3840
fileprivate static func initialize(_ platformLock: PlatformLock) {
3941
#if canImport(Darwin)
4042
platformLock.initialize(to: os_unfair_lock())
41-
#elseif canImport(Glibc)
43+
#elseif canImport(Glibc) || canImport(Bionic)
4244
let result = pthread_mutex_init(platformLock, nil)
4345
precondition(result == 0, "pthread_mutex_init failed")
4446
#elseif canImport(WinSDK)
@@ -47,7 +49,7 @@ internal struct Lock {
4749
}
4850

4951
fileprivate static func deinitialize(_ platformLock: PlatformLock) {
50-
#if canImport(Glibc)
52+
#if canImport(Glibc) || canImport(Bionic)
5153
let result = pthread_mutex_destroy(platformLock)
5254
precondition(result == 0, "pthread_mutex_destroy failed")
5355
#endif
@@ -57,7 +59,7 @@ internal struct Lock {
5759
fileprivate static func lock(_ platformLock: PlatformLock) {
5860
#if canImport(Darwin)
5961
os_unfair_lock_lock(platformLock)
60-
#elseif canImport(Glibc)
62+
#elseif canImport(Glibc) || canImport(Bionic)
6163
pthread_mutex_lock(platformLock)
6264
#elseif canImport(WinSDK)
6365
AcquireSRWLockExclusive(platformLock)
@@ -67,7 +69,7 @@ internal struct Lock {
6769
fileprivate static func unlock(_ platformLock: PlatformLock) {
6870
#if canImport(Darwin)
6971
os_unfair_lock_unlock(platformLock)
70-
#elseif canImport(Glibc)
72+
#elseif canImport(Glibc) || canImport(Bionic)
7173
let result = pthread_mutex_unlock(platformLock)
7274
precondition(result == 0, "pthread_mutex_unlock failed")
7375
#elseif canImport(WinSDK)

Sources/AsyncSequenceValidation/TaskDriver.swift

+11-4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import _CAsyncSequenceValidationSupport
1515
import Darwin
1616
#elseif canImport(Glibc)
1717
import Glibc
18+
#elseif canImport(Bionic)
19+
import Bionic
1820
#elseif canImport(WinSDK)
1921
#error("TODO: Port TaskDriver threading to windows")
2022
#endif
@@ -24,11 +26,16 @@ func start_thread(_ raw: UnsafeMutableRawPointer) -> UnsafeMutableRawPointer? {
2426
Unmanaged<TaskDriver>.fromOpaque(raw).takeRetainedValue().run()
2527
return nil
2628
}
27-
#elseif canImport(Glibc)
29+
#elseif canImport(Glibc) && !os(Android)
2830
func start_thread(_ raw: UnsafeMutableRawPointer?) -> UnsafeMutableRawPointer? {
2931
Unmanaged<TaskDriver>.fromOpaque(raw!).takeRetainedValue().run()
3032
return nil
3133
}
34+
#elseif os(Android)
35+
func start_thread(_ raw: UnsafeMutableRawPointer) -> UnsafeMutableRawPointer {
36+
Unmanaged<TaskDriver>.fromOpaque(raw).takeRetainedValue().run()
37+
return UnsafeMutableRawPointer(bitPattern: 0xdeadbee)!
38+
}
3239
#elseif canImport(WinSDK)
3340
#error("TODO: Port TaskDriver threading to windows")
3441
#endif
@@ -38,7 +45,7 @@ final class TaskDriver {
3845
let queue: WorkQueue
3946
#if canImport(Darwin)
4047
var thread: pthread_t?
41-
#elseif canImport(Glibc)
48+
#elseif canImport(Glibc) || canImport(Bionic)
4249
var thread = pthread_t()
4350
#elseif canImport(WinSDK)
4451
#error("TODO: Port TaskDriver threading to windows")
@@ -50,7 +57,7 @@ final class TaskDriver {
5057
}
5158

5259
func start() {
53-
#if canImport(Darwin) || canImport(Glibc)
60+
#if canImport(Darwin) || canImport(Glibc) || canImport(Bionic)
5461
pthread_create(&thread, nil, start_thread,
5562
Unmanaged.passRetained(self).toOpaque())
5663
#elseif canImport(WinSDK)
@@ -68,7 +75,7 @@ final class TaskDriver {
6875
func join() {
6976
#if canImport(Darwin)
7077
pthread_join(thread!, nil)
71-
#elseif canImport(Glibc)
78+
#elseif canImport(Glibc) || canImport(Bionic)
7279
pthread_join(thread, nil)
7380
#elseif canImport(WinSDK)
7481
#error("TODO: Port TaskDriver threading to windows")

0 commit comments

Comments
 (0)