From 9138f16e8366b944bf44a644c4d6144249dd66e1 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Sat, 20 Dec 2025 00:17:18 +0000 Subject: [PATCH] adding pthread_tryjoin_n/pthread_timedjoin_np to Linux. close #4878 ref linux: https://man7.org/linux/man-pages/man3/pthread_tryjoin_np.3.html ref freebsd: https://man.freebsd.org/cgi/man.cgi?query=pthread_np&apropos=0&sektion=3&manpath=FreeBSD+13.3-RELEASE&arch=default&format=html --- libc-test/semver/freebsd.txt | 1 + libc-test/semver/linux-gnu.txt | 2 ++ libc-test/semver/linux-musl.txt | 1 + src/unix/bsd/freebsdlike/freebsd/mod.rs | 6 ++++++ src/unix/linux_like/linux/gnu/mod.rs | 10 ++++++++++ src/unix/linux_like/linux/musl/mod.rs | 10 ++++++++++ 6 files changed, 30 insertions(+) diff --git a/libc-test/semver/freebsd.txt b/libc-test/semver/freebsd.txt index 99748fe84be5f..110e75e2bca12 100644 --- a/libc-test/semver/freebsd.txt +++ b/libc-test/semver/freebsd.txt @@ -2232,6 +2232,7 @@ pthread_spin_lock pthread_spin_trylock pthread_spin_unlock pthread_spinlock_t +pthread_timedjoin_np ptrace ptrace_io_desc ptrace_lwpinfo diff --git a/libc-test/semver/linux-gnu.txt b/libc-test/semver/linux-gnu.txt index 64e87bf9fc139..56bffa7f289ef 100644 --- a/libc-test/semver/linux-gnu.txt +++ b/libc-test/semver/linux-gnu.txt @@ -657,6 +657,8 @@ pthread_attr_setaffinity_np pthread_rwlockattr_getkind_np pthread_rwlockattr_getpshared pthread_rwlockattr_setkind_np +pthread_timedjoin_np +pthread_tryjoin_np ptrace_peeksiginfo_args ptrace_sud_config ptrace_syscall_info diff --git a/libc-test/semver/linux-musl.txt b/libc-test/semver/linux-musl.txt index fb89d83a38040..6f94aaa1c5ffb 100644 --- a/libc-test/semver/linux-musl.txt +++ b/libc-test/semver/linux-musl.txt @@ -81,6 +81,7 @@ prlimit prlimit64 process_vm_readv process_vm_writev +pthread_timedjoin_np pututxline pwritev2 pwritev64 diff --git a/src/unix/bsd/freebsdlike/freebsd/mod.rs b/src/unix/bsd/freebsdlike/freebsd/mod.rs index 136a29e6b4194..2e893b58d3c6f 100644 --- a/src/unix/bsd/freebsdlike/freebsd/mod.rs +++ b/src/unix/bsd/freebsdlike/freebsd/mod.rs @@ -4549,6 +4549,12 @@ extern "C" { pub fn pthread_spin_trylock(lock: *mut pthread_spinlock_t) -> c_int; pub fn pthread_spin_unlock(lock: *mut pthread_spinlock_t) -> c_int; + pub fn pthread_timedjoin_np( + thread: crate::pthread_t, + retval: *mut *mut c_void, + abstime: *const crate::timespec, + ) -> c_int; + #[cfg_attr(all(target_os = "freebsd", freebsd11), link_name = "statfs@FBSD_1.0")] pub fn statfs(path: *const c_char, buf: *mut statfs) -> c_int; #[cfg_attr(all(target_os = "freebsd", freebsd11), link_name = "fstatfs@FBSD_1.0")] diff --git a/src/unix/linux_like/linux/gnu/mod.rs b/src/unix/linux_like/linux/gnu/mod.rs index 0951dcfc70c5b..a51f78392a5e0 100644 --- a/src/unix/linux_like/linux/gnu/mod.rs +++ b/src/unix/linux_like/linux/gnu/mod.rs @@ -1115,6 +1115,16 @@ extern "C" { val: c_int, ) -> c_int; pub fn pthread_sigqueue(thread: crate::pthread_t, sig: c_int, value: crate::sigval) -> c_int; + pub fn pthread_tryjoin_np(thread: crate::pthread_t, retval: *mut *mut c_void) -> c_int; + #[cfg_attr( + all(target_pointer_width = "32", gnu_time_bits64), + link_name = "__pthread_timedjoin_np64" + )] + pub fn pthread_timedjoin_np( + thread: crate::pthread_t, + retval: *mut *mut c_void, + abstime: *const crate::timespec, + ) -> c_int; pub fn mallinfo() -> crate::mallinfo; pub fn mallinfo2() -> crate::mallinfo2; pub fn malloc_stats(); diff --git a/src/unix/linux_like/linux/musl/mod.rs b/src/unix/linux_like/linux/musl/mod.rs index 2fe0440eb43fe..f16efaac7ecc7 100644 --- a/src/unix/linux_like/linux/musl/mod.rs +++ b/src/unix/linux_like/linux/musl/mod.rs @@ -869,6 +869,16 @@ extern "C" { note = "musl provides `utmp` as stubs and an alternative should be preferred; see https://wiki.musl-libc.org/faq.html" )] pub fn utmpxname(file: *const c_char) -> c_int; + pub fn pthread_tryjoin_np(thread: crate::pthread_t, retval: *mut *mut c_void) -> c_int; + #[cfg_attr( + all(musl32_time64, target_pointer_width = "32"), + link_name = "__pthread_timedjoin_np_time64" + )] + pub fn pthread_timedjoin_np( + thread: crate::pthread_t, + retval: *mut *mut c_void, + abstime: *const crate::timespec, + ) -> c_int; } // Alias to 64 to mimic glibc's LFS64 support