Skip to content

Commit 3a115fc

Browse files
committed
Properly handle the syscalls on Linux and do some spins
fix some stuff
1 parent b2cffb6 commit 3a115fc

File tree

4 files changed

+356
-80
lines changed

4 files changed

+356
-80
lines changed

stdlib/public/SwiftShims/swift/shims/SynchronizationShims.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
#include <sys/syscall.h>
2222
#include <unistd.h>
2323

24-
#define SWIFT_FUTEX_WAITERS FUTEX_WAITERS
25-
2624
static inline __swift_uint32_t _swift_stdlib_gettid() {
2725
static __thread tid = 0;
2826

@@ -33,13 +31,17 @@ static inline __swift_uint32_t _swift_stdlib_gettid() {
3331
return tid;
3432
}
3533

36-
static inline __swift_bool _swift_stdlib_wait(__swift_uint32_t *lock) {
34+
static inline __swift_bool _swift_stdlib_futex_lock(__swift_uint32_t *lock) {
3735
return syscall(SYS_futex, lock, FUTEX_LOCK_PI_PRIVATE,
3836
/* val */ 0, // this value is ignored by this futex op
3937
/* timeout */ NULL); // block indefinitely
4038
}
4139

42-
static inline __swift_bool _swift_stdlib_wake(__swift_uint32_t *lock) {
40+
static inline __swift_bool _swift_stdlib_futex_trylock(__swift_uint32_t *lock) {
41+
return syscall(SYS_futex, lock, FUTEX_TRYLOCK_PI);
42+
}
43+
44+
static inline __swift_bool _swift_stdlib_futex_unlock(__swift_uint32_t *lock) {
4345
return syscall(SYS_futex, lock, FUTEX_UNLOCK_PI_PRIVATE);
4446
}
4547

stdlib/public/Synchronization/CMakeLists.txt

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -34,37 +34,26 @@ set(SWIFT_SYNCHRONIZATION_GYB_SOURCES
3434
Atomics/AtomicStorage.swift.gyb
3535
)
3636

37-
# Darwin dependencies and sources
38-
39-
set(SWIFT_SYNCHRONIZATION_DARWIN_DEPENDENCIES)
40-
41-
if(SWIFT_BUILD_SDK_OVERLAY)
42-
set(SWIFT_SYNCHRONIZATION_DARWIN_DEPENDENCIES Darwin)
43-
endif()
37+
# Darwin sources
4438

4539
set(SWIFT_SYNCHRONIZATION_DARWIN_SOURCES
4640
Mutex/DarwinImpl.swift
4741
)
4842

49-
# Linux dependencies and sources
43+
# Linux sources
5044

5145
set(SWIFT_SYNCHRONIZATION_LINUX_SOURCES
5246
Mutex/LinuxImpl.swift
47+
Mutex/SpinLoopHint.swift
5348
)
5449

55-
# Wasm dependencies and sources
50+
# Wasm sources
5651

5752
set(SWIFT_SYNCHRONIZATION_WASM_SOURCES
5853
Mutex/WasmImpl.swift
5954
)
6055

61-
# Windows dependencies and sources
62-
63-
set(SWIFT_SYNCHRONIZATION_WINDOWS_DEPENDENCIES)
64-
65-
if(SWIFT_BUILD_SDK_OVERLAY)
66-
set(SWIFT_SYNCHRONIZATION_WINDOWS_DEPENDENCIES WinSDK)
67-
endif()
56+
# Windows sources
6857

6958
set(SWIFT_SYNCHRONIZATION_WINDOWS_SOURCES
7059
Mutex/WindowsImpl.swift
@@ -76,6 +65,7 @@ set(SWIFT_SYNCHRNOIZATION_SWIFT_FLAGS
7665
"-enable-experimental-feature" "RawLayout"
7766
"-enable-experimental-feature" "StaticExclusiveOnly"
7867
"-enable-experimental-feature" "TransferringArgsAndResults"
68+
"-enable-experimental-feature" "Extern"
7969
)
8070

8171
add_swift_target_library(swiftSynchronization ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} IS_STDLIB
@@ -100,15 +90,17 @@ add_swift_target_library(swiftSynchronization ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES
10090
${SWIFT_SYNCHRONIZATION_WINDOWS_SOURCES}
10191

10292
SWIFT_MODULE_DEPENDS_OSX
103-
${SWIFT_SYNCHRONIZATION_DARWIN_DEPENDENCIES}
93+
Darwin
10494
SWIFT_MODULE_DEPENDS_IOS
105-
${SWIFT_SYNCHRONIZATION_DARWIN_DEPENDENCIES}
95+
Darwin
10696
SWIFT_MODULE_DEPENDS_TVOS
107-
${SWIFT_SYNCHRONIZATION_DARWIN_DEPENDENCIES}
97+
Darwin
10898
SWIFT_MODULE_DEPENDS_WATCHOS
109-
${SWIFT_SYNCHRONIZATION_DARWIN_DEPENDENCIES}
99+
Darwin
100+
SWIFT_MODULE_DEPENDS_LINUX
101+
Glibc
110102
SWIFT_MODULE_DEPENDS_WINDOWS
111-
${SWIFT_SYNCHRONIZATION_WINDOWS_DEPENDENCIES}
103+
WinSDK
112104

113105
SWIFT_COMPILE_FLAGS
114106
${SWIFT_SYNCHRNOIZATION_SWIFT_FLAGS}

0 commit comments

Comments
 (0)