Commit Graph

168 Commits

Author SHA1 Message Date
Dylan DPC 90c59e736b Rollup merge of #98101 - vladimir-ea:stdlib_watch_os, r=thomcc
stdlib support for Apple WatchOS

This is a follow-up to https://github.com/rust-lang/rust/pull/95243 (Add Apple WatchOS compiler targets) that adds stdlib support for Apple WatchOS.

`@deg4uss3r`
`@nagisa`
2022-07-20 16:17:17 +05:30
Vladimir Michael Eatwell 439d64a83c Library changes for Apple WatchOS 2022-07-20 08:57:36 +01:00
Matthias Krüger c348beacea Rollup merge of #97140 - joboet:solid_parker, r=m-ou-se
std: use an event-flag-based thread parker on SOLID

`Mutex` and `Condvar` are being replaced by more efficient implementations, which need thread parking themselves (see #93740). Therefore, the generic `Parker` needs to be replaced on all platforms where the new lock implementation will be used, which, after #96393, are SOLID, SGX and Hermit (more PRs coming soon).

SOLID, conforming to the [μITRON specification](http://www.ertl.jp/ITRON/SPEC/FILE/mitron-400e.pdf), has event flags, which are a thread parking primitive very similar to `Parker`. However, they do not make any atomic ordering guarantees (even though those can probably be assumed) and necessitate a system call even when the thread token is already available. Hence, this `Parker`, like the Windows parker, uses an extra atomic state variable.

I future-proofed the code by wrapping the event flag in a `WaitFlag` structure, as both SGX and Hermit can share the Parker implementation, they just have slightly different primitives (SGX uses signals and Hermit has a thread blocking API).

`````@kawadakk````` I assume you are the target maintainer? Could you test this for me?
2022-06-26 19:46:59 +02:00
Matthias Krüger ecefccd8d2 Rollup merge of #98194 - m-ou-se:leak-locked-pthread-mutex, r=Amanieu
Leak pthread_{mutex,rwlock}_t if it's dropped while locked.

Fixes https://github.com/rust-lang/rust/issues/85434.
2022-06-25 15:14:09 +02:00
Yuki Okushi 897745bf67 Rollup merge of #96768 - m-ou-se:futex-fuchsia, r=tmandry
Use futex based thread parker on Fuchsia.
2022-06-22 15:16:09 +09:00
Mara Bos ac38258dcc Use futex based thread parker on Fuchsia. 2022-06-21 11:49:59 +02:00
Mara Bos a171a6b7ec Remove lies in comments. 2022-06-20 23:02:21 +02:00
bors 15fc228d0d Auto merge of #97791 - m-ou-se:const-locks, r=m-ou-se
Make {Mutex, Condvar, RwLock}::new() const.

This makes it possible to have `static M: Mutex<_> = Mutex::new(..);` 🎉

Our implementations [on Linux](https://github.com/rust-lang/rust/pull/95035), [on Windows](https://github.com/rust-lang/rust/pull/77380), and various BSDs and some tier 3 platforms have already been using a non-allocating const-constructible implementation. As of https://github.com/rust-lang/rust/pull/97647, the remaining platforms (most notably macOS) now have a const-constructible implementation as well. This means we can finally make these functions publicly const.

Tracking issue: https://github.com/rust-lang/rust/issues/93740
2022-06-19 08:20:36 +00:00
Mara Bos d72294491c Leak pthreax_mutex_t when it's dropped while locked. 2022-06-16 12:09:12 +02:00
joboet caff72361f std: relax memory orderings in Parker
Co-authored-by: Tomoaki Kawada <kawada@kmckk.co.jp>
2022-06-15 14:01:31 +02:00
AzureMarker be8b88f2b6 Lower listen backlog to fix accept crashes
See https://github.com/Meziu/rust-horizon/pull/1
2022-06-13 20:44:56 -07:00
Meziu 4e808f87cc Horizon OS STD support
Co-authored-by: Ian Chamberlain <ian.h.chamberlain@gmail.com>
Co-authored-by: Mark Drobnak <mark.drobnak@gmail.com>
2022-06-13 20:44:39 -07:00
Mara Bos edae495855 Make {Mutex, Condvar, RwLock}::new() const. 2022-06-06 13:55:43 +02:00
Mara Bos acc3ab4e65 Make all {Mutex, Condvar, RwLock}::new #[inline]. 2022-06-06 13:49:23 +02:00
joboet b9660de664 std: solve priority issue for Parker 2022-06-05 11:45:22 +02:00
Mara Bos 6a417d4828 Lazily allocate+initialize locks. 2022-06-03 17:04:14 +02:00
Mara Bos ac5aa1ded5 Use Drop instead of destroy() for locks. 2022-06-03 16:45:47 +02:00
est31 6d63d3b888 Remove "sys isn't exported yet" phrase
The oldest occurence is from 9e224c2bf1,
which is from the pre-1.0 days. In the years since then, std::sys still
hasn't been exported, and the last attempt was met with strong criticism:
https://github.com/rust-lang/rust/pull/97151

Thus, removing the "yet" part makes a lot of sense.
2022-05-30 12:07:43 +02:00
joboet 3b6ae15058 std: fix deadlock in Parker 2022-05-19 14:37:29 +02:00
joboet fd76552a4b std: use an event flag based thread parker on SOLID 2022-05-18 12:18:51 +02:00
Mara Bos 4f212f08cf Use Rust 2021 prelude in std itself. 2022-05-09 11:12:32 +02:00
bors 7f9e013ba6 Auto merge of #96510 - m-ou-se:futex-bsd, r=Amanieu
Use futex-based locks and thread parker on {Free, Open, DragonFly}BSD.

This switches *BSD to our futex-based locks and thread parker.

Tracking issue: https://github.com/rust-lang/rust/issues/93740

This is a draft, because this still needs a new version of the `libc` crate to be published that includes https://github.com/rust-lang/libc/pull/2770.

r? `@Amanieu`
2022-05-06 07:20:04 +00:00
Yuki Okushi b792258b32 Rollup merge of #96619 - akiekintveld:same_mutex_check_relaxed_ordering, r=m-ou-se
Relax memory ordering used in SameMutexCheck

`SameMutexCheck` only requires atomicity for `self.addr`, but does not need ordering of other memory accesses in either the success or failure case. Using `Relaxed`, the code still correctly handles the case when two threads race to store an address.
2022-05-05 10:20:34 +09:00
Mara Bos 7b7d1d6c48 Don't use futexes on netbsd.
The latest NetBSD release doesn't include the futex syscall yet.
2022-05-03 12:26:17 +02:00
Austin Kiekintveld 55a7d18189 Add comment 2022-05-01 19:07:36 -07:00
Austin Kiekintveld a05df2ea19 Fix formatting 2022-05-01 19:02:28 -07:00
Austin Kiekintveld df4457e20b Relax memory ordering used in SameMutexCheck
`SameMutexCheck` only requires atomicity for `self.addr`, but does not need ordering of other memory accesses in either the success or failure case. Using `Relaxed`, the code still correctly handles the case when two threads race to store an address.
2022-05-01 16:46:19 -07:00
Austin Kiekintveld 63a90efe2f Relax memory ordering used in min_stack
`min_stack` does not provide any synchronization guarantees to its callers, and only requires atomicity for `MIN` itself, so relaxed memory ordering is sufficient.
2022-05-01 15:55:54 -07:00
Mara Bos 04b0bc97bb Use futex-based locks and thread parker on FreeBSD. 2022-04-29 16:45:17 +02:00
Mara Bos 69f0bcb26d Use futex-based locks and thread parker on DragonFlyBSD. 2022-04-29 16:30:54 +02:00
Mara Bos 2dfad1e3f8 Use futex-based locks and thread parker on NetBSD. 2022-04-29 16:30:54 +02:00
Mara Bos afe1a256ce Use futex-based locks and thread parker on OpenBSD. 2022-04-29 16:30:54 +02:00
bors baaa3b6829 Auto merge of #96393 - joboet:pthread_parker, r=thomcc
std: directly use pthread in UNIX parker implementation

`Mutex` and `Condvar` are being replaced by more efficient implementations, which need thread parking themselves (see #93740). Therefore we should use the `pthread` synchronization primitives directly. Also, we can avoid allocating the mutex and condition variable because the `Parker` struct is being placed in an `Arc` anyways.

This basically is just a copy of the current `Mutex` and `Condvar` code, which will however be removed (again, see #93740). An alternative implementation could be to use dedicated private `OsMutex` and `OsCondvar` types, but all the other platforms supported by std actually have their own thread parking primitives.

I used `Pin` to guarantee a stable address for the `Parker` struct, while the current implementation does not, rather using extra unsafe declaration. Since the thread struct is shared anyways, I assumed this would not add too much clutter while being clearer.
2022-04-28 21:58:08 +00:00
Aron Parker fc6af819c4 Make EncodeWide implement FusedIterator 2022-04-25 18:38:47 +02:00
joboet 54daf496e2 std: directly use pthread in UNIX parker implementation
Mutex and Condvar are being replaced by more efficient implementations, which need thread parking themselves (see #93740). Therefore use the pthread synchronization primitives directly. Also, avoid allocating because the Parker struct is being placed in an Arc anyways.
2022-04-25 15:19:50 +02:00
Mara Bos 4212de63ab Use a single ReentrantMutex implementation on all platforms. 2022-04-16 11:30:22 +02:00
Mara Bos 7a35c0f52d Use u32 instead of i32 for futexes. 2022-04-14 11:44:12 +02:00
Mara Bos 6e16f9b10f Rename RWLock to RwLock in std::sys. 2022-04-06 16:33:53 +02:00
Aria Beingessner c7de289e1c Make the stdlib largely conform to strict provenance.
Some things like the unwinders and system APIs are not fully conformant,
this only covers a lot of low-hanging fruit.
2022-03-29 20:18:21 -04:00
Mara Bos ac6996345d Move pthread locks to own module. 2022-03-21 15:51:25 +01:00
T-O-R-U-S 72a25d05bf Use implicit capture syntax in format_args
This updates the standard library's documentation to use the new syntax. The
documentation is worthwhile to update as it should be more idiomatic
(particularly for features like this, which are nice for users to get acquainted
with). The general codebase is likely more hassle than benefit to update: it'll
hurt git blame, and generally updates can be done by folks updating the code if
(and when) that makes things more readable with the new format.

A few places in the compiler and library code are updated (mostly just due to
already having been done when this commit was first authored).
2022-03-10 10:23:40 -05:00
Chris Copeland f2ebd0a11f Remove assertion on output length for getsockopt.
POSIX allows `getsockopt` to set `*option_len` to a smaller value if
necessary. Windows will set `*option_len` to 1 for boolean options even
when the caller passes a `BOOL` (`int`) with `*option_len` as 4.
2022-02-20 21:27:36 -08:00
Chris Copeland 3eb983ed99 Fix setsockopt and getsockopt parameter names.
Previously `level` was named `opt` and `option_name` was named `val`,
then extra names of `payload` or `slot` were used for the option value.
This change aligns the wrapper parameters with their names in POSIX.
Winsock uses similar but more abbreviated names: `level`, `optname`,
`optval`, `optlen`.
2022-02-20 21:27:22 -08:00
Thom Chiovoloni 554918e311 Hide Repr details from io::Error, and rework io::Error::new_const. 2022-02-04 18:47:29 -08:00
Mark Rousskov 85930c8f44 Configure panic hook backtrace behavior 2022-02-02 13:46:42 -05:00
Chris Denton 84c0c9d20d Avoid double panics when using TempDir in tests 2022-01-25 10:36:10 +00:00
Kornel c2807525a5 Help optimize out backtraces when disabled 2022-01-17 02:21:24 +00:00
bors dd3ac41495 Auto merge of #92396 - xfix:remove-commandenv-apply, r=Mark-Simulacrum
Remove CommandEnv::apply

It's not being used and uses unsound set_var and remove_var functions. This is an internal function that isn't exported (even with `process_internals` feature), so this shouldn't break anything.

Also see #92365. Note that this isn't the only use of those methods in standard library, so that particular pull request will need more changes than just this to work (in particular, `test_capture_env_at_spawn` is using `set_var` and `remove_var`).
2022-01-01 20:45:37 +00:00
Konrad Borowski 14fc9dcbba Remove CommandEnv::apply
It's not being used and uses unsound set_var and remove_var
functions.
2021-12-29 10:07:44 +01:00
Xuanwo b07ae1c4d5 Address comments
Signed-off-by: Xuanwo <github@xuanwo.io>
2021-12-29 14:02:20 +08:00