You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
use_file: std::sync::Mutex, dropping all libpthread use.
pthreads mutexes are not safe to move. While it is very unlikely that
the mutex we create will ever be moved, we don't actively do anything
to actively prevent it from being moved. (libstd, when it used/uses
pthreads mutexes, would box them to prevent them from being moved.)
Also, now on Linux and Android (and many other targets for which we
don't use use_std), libstd uses futexes instead of pthreads mutexes.
Thus using libstd's Mutex will be more efficient and avoid adding an
often-otherwise-unnecessary libpthreads dependency on these targets.
* Linux, Android: Futex [1].
* Haiku, Redox, NTO, AIX: pthreads [2].
* others: not using `use_file`.
This will not affect our plans for *-*-linux-none, since we don't
plan to use `use_file` for it.
This breaks 32-bit x86 QNX Neutrino, which doesn't have libstd
because the target itself is abandoned [3]. the other QNX Neutrino
targets didn't get libstd support until Rust 1.69, so this
effectively raises the MSRV for them to 1.69.
On x86_64 Linux, this change removes all libpthreads dependencies:
- call qword ptr [rip + pthread_mutex_lock@GOTPCREL]
- call qword ptr [rip + pthread_mutex_unlock@GOTPCREL]
and adds these dependencies:
+ core::ptr::drop_in_place<std::sync::mutex::MutexGuard<()>>
+ std::panicking::panic_count::is_zero_slow_path
+ std::sys::sync::mutex::futex::Mutex::lock_contended
+ std::sys::sync::mutex::futex::Mutex::wake
as measured using `cargo asm`.
[1] https://github.com/rust-lang/rust/blob/c1dba09f263cbff6170f130aa418e28bdf22bd96/library/std/src/sys/sync/mutex/mod.rs#L4-L10
[2] https://github.com/rust-lang/rust/blob/c1dba09f263cbff6170f130aa418e28bdf22bd96/library/std/src/sys/sync/mutex/mod.rs#L17-L20
[3] rust-random#453 (comment)
0 commit comments