summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2022-10-06 13:58:01 +0000
committerbors <bors@rust-lang.org>2022-10-06 13:58:01 +0000
commit14f31db9387fde013043d408c0b0d915825055fd (patch)
treea54d89c7e24c8e4194c5d717de751a46d1df7fc0
parentdc3084a1a375411fb09be303b80a28f0fa6e3986 (diff)
parentcf1738ad1407f3295dc4ae25977503621d0c4513 (diff)
downloadrust-libc-14f31db9387fde013043d408c0b0d915825055fd.tar.gz
Auto merge of #2940 - thomcc:unfair_lock_finish, r=JohnTitor
Finish darwin os/lock.h bindings This takes over for #2918, whose author indicated they won't be able to finish for a while: https://github.com/rust-lang/libc/pull/2918#issuecomment-1266096063. Fixes #2917 Closes #2918
-rw-r--r--libc-test/build.rs3
-rw-r--r--libc-test/semver/apple.txt9
-rw-r--r--src/unix/bsd/apple/mod.rs38
3 files changed, 50 insertions, 0 deletions
diff --git a/libc-test/build.rs b/libc-test/build.rs
index 0e56050b00..5376c46860 100644
--- a/libc-test/build.rs
+++ b/libc-test/build.rs
@@ -231,6 +231,7 @@ fn test_apple(target: &str) {
"netinet/ip.h",
"netinet/tcp.h",
"netinet/udp.h",
+ "os/lock.h",
"poll.h",
"pthread.h",
"pthread_spis.h",
@@ -2442,6 +2443,8 @@ fn test_emscripten(target: &str) {
// Just pass all these through, no need for a "struct" prefix
"FILE" | "fd_set" | "Dl_info" | "DIR" => ty.to_string(),
+ "os_unfair_lock" => "struct os_unfair_lock_s".to_string(),
+
t if is_union => format!("union {}", t),
t if t.ends_with("_t") => t.to_string(),
diff --git a/libc-test/semver/apple.txt b/libc-test/semver/apple.txt
index cb646e686b..83cd77d9a2 100644
--- a/libc-test/semver/apple.txt
+++ b/libc-test/semver/apple.txt
@@ -1003,6 +1003,7 @@ OFDEL
OFILL
OLD_TIME
ONOEOT
+OS_UNFAIR_LOCK_INIT
OXTABS
O_ASYNC
O_DSYNC
@@ -1993,6 +1994,14 @@ open_memstream
open_wmemstream
openat
openpty
+os_unfair_lock
+os_unfair_lock_s
+os_unfair_lock_t
+os_unfair_lock_lock
+os_unfair_lock_trylock
+os_unfair_lock_unlock
+os_unfair_lock_assert_owner
+os_unfair_lock_assert_not_owner
pause
policy_t
popen
diff --git a/src/unix/bsd/apple/mod.rs b/src/unix/bsd/apple/mod.rs
index cee87ffbfc..a9438ef57a 100644
--- a/src/unix/bsd/apple/mod.rs
+++ b/src/unix/bsd/apple/mod.rs
@@ -121,6 +121,9 @@ pub type pthread_introspection_hook_t =
extern "C" fn(event: ::c_uint, thread: ::pthread_t, addr: *mut ::c_void, size: ::size_t);
pub type pthread_jit_write_callback_t = ::Option<extern "C" fn(ctx: *mut ::c_void) -> ::c_int>;
+pub type os_unfair_lock = os_unfair_lock_s;
+pub type os_unfair_lock_t = *mut os_unfair_lock;
+
pub type vm_statistics_t = *mut vm_statistics;
pub type vm_statistics_data_t = vm_statistics;
pub type vm_statistics64_t = *mut vm_statistics64;
@@ -1295,6 +1298,10 @@ s_no_extra_traits! {
pub l2p_contigbytes: ::off_t,
pub l2p_devoffset: ::off_t,
}
+
+ pub struct os_unfair_lock_s {
+ _os_unfair_lock_opaque: u32,
+ }
}
impl siginfo_t {
@@ -2576,6 +2583,27 @@ cfg_if! {
l2p_devoffset.hash(state);
}
}
+ impl PartialEq for os_unfair_lock {
+ fn eq(&self, other: &os_unfair_lock) -> bool {
+ self._os_unfair_lock_opaque == other._os_unfair_lock_opaque
+ }
+ }
+
+ impl Eq for os_unfair_lock {}
+
+ impl ::fmt::Debug for os_unfair_lock {
+ fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
+ f.debug_struct("os_unfair_lock")
+ .field("_os_unfair_lock_opaque", &self._os_unfair_lock_opaque)
+ .finish()
+ }
+ }
+
+ impl ::hash::Hash for os_unfair_lock {
+ fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
+ self._os_unfair_lock_opaque.hash(state);
+ }
+ }
}
}
@@ -3863,6 +3891,10 @@ pub const PTHREAD_RWLOCK_INITIALIZER: pthread_rwlock_t = pthread_rwlock_t {
__opaque: [0; __PTHREAD_RWLOCK_SIZE__],
};
+pub const OS_UNFAIR_LOCK_INIT: os_unfair_lock = os_unfair_lock {
+ _os_unfair_lock_opaque: 0,
+};
+
pub const MINSIGSTKSZ: ::size_t = 32768;
pub const SIGSTKSZ: ::size_t = 131072;
@@ -5221,6 +5253,12 @@ extern "C" {
pub fn pthread_jit_write_freeze_callbacks_np();
pub fn pthread_cpu_number_np(cpu_number_out: *mut ::size_t) -> ::c_int;
+ pub fn os_unfair_lock_lock(lock: os_unfair_lock_t);
+ pub fn os_unfair_lock_trylock(lock: os_unfair_lock_t) -> bool;
+ pub fn os_unfair_lock_unlock(lock: os_unfair_lock_t);
+ pub fn os_unfair_lock_assert_owner(lock: os_unfair_lock_t);
+ pub fn os_unfair_lock_assert_not_owner(lock: os_unfair_lock_t);
+
pub fn thread_policy_set(
thread: thread_t,
flavor: thread_policy_flavor_t,