Commit Graph

363 Commits

Author SHA1 Message Date
Connor Tsui
96adb7df96 add poisoning documentation to LazyLock 2025-08-03 22:57:08 +02:00
Connor Tsui
cf3865f7a5 fix broken doc section link in poison.rs 2025-08-03 22:57:07 +02:00
Samuel Tardieu
ce1961bbfc Rollup merge of #144185 - purplesyringa:poisoning-wording, r=Amanieu
Document guarantees of poisoning

This mostly documents the current behavior of `Mutex` and `RwLock` (rust-lang/rust#143471) as imperfect. It's unlikely that the situation improves significantly in the future, and even if it does, the rules will probably be more complicated than "poisoning is completely reliable", so this is a conservative guarantee.

We also explicitly specify that `OnceLock` never poisons, even though it has an API similar to mutexes.

Fixes rust-lang/rust#143471 by improving documentation.

r? ``@Amanieu``
2025-08-02 11:24:22 +02:00
Connor Tsui
3bdc228c10 add nonpoison::mutex implementation
Adds the equivalent `nonpoison` types to the `poison::mutex` module.
These types and implementations are gated under the `nonpoison_mutex`
feature gate.

Also blesses the ui tests that now have a name conflicts (because these
types no longer have unique names). The full path distinguishes the
different types.

Co-authored-by: Aandreba <aandreba@gmail.com>
Co-authored-by: Trevor Gross <tmgross@umich.edu>
2025-07-29 10:32:15 +02:00
Connor Tsui
ec4dc1c5f8 clean up existing poison files 2025-07-29 10:32:14 +02:00
Alisa Sireneva
c1d06cccae Add a note on foreign exceptions 2025-07-25 22:14:02 +03:00
Alisa Sireneva
5b8c61494f Add a list of failure conditions for poisoning 2025-07-25 21:03:09 +03:00
Alisa Sireneva
da4687bafe Link to Mutex poisoning docs from RwLock docs 2025-07-25 16:09:29 +03:00
Alisa Sireneva
5b2c61edbe Document guarantees of poisoning
This mostly documents the current behavior of `Mutex` and `RwLock` as
imperfect. It's unlikely that the situation improves significantly in
the future, and even if it does, the rules will probably be more
complicated than "poisoning is completely reliable", so this is a
conservative guarantee.

We also explicitly specify that `OnceLock` never poisons, even though it
has an API similar to mutexes.
2025-07-19 19:25:59 +03:00
Martin Ombura Jr.
f1d84468c8 Update poison.rs
Typo in word "below"
2025-07-15 20:07:03 -07:00
Matthias Krüger
2554c424ef Rollup merge of #143340 - nabijaczleweli:awhile, r=mati865
awhile -> a while where appropriate
2025-07-07 19:55:32 +02:00
Jubilee
2f119daf4e Rollup merge of #143086 - SciMind2460:patch-2, r=workingjubilee
Update poison.rs to fix the typo (sys->sync)
2025-07-04 23:26:20 -07:00
наб
a0111ec7a1 awhile -> a while where appropriate 2025-07-02 20:17:29 +02:00
Josh Stone
9ce8930da6 Update version placeholders 2025-07-01 10:54:33 -07:00
Kurt Heiritz (pseudo)
06fb36c92e Update poison.rs to fix the typo (sys->sync) 2025-06-27 16:26:53 +05:30
krikera
7a70f642d3 Fix RwLock::try_write documentation for WouldBlock condition 2025-06-26 15:33:43 +05:30
Matthias Krüger
55f7571a7e Rollup merge of #140715 - lukaslueg:oncecellsyncdocs, r=tgross35
Clarify &mut-methods' docs on sync::OnceLock

Three small changes to the docs of `sync::OnceLock`:

* The docs for `OnceLock::take()` used to [say](https://doc.rust-lang.org/std/sync/struct.OnceLock.html#method.take) "**Safety** is guaranteed by requiring a mutable reference." (emphasis mine). While technically correct, imho its not necessary to even mention safety - as opposed to unsafety - here: Safety never comes up wrt `OnceLock`, as there is (currently) no way to interact with a `OnceLock` in an unsafe way; there are no unsafe methods on `OnceLock`, so there is "safety" guarantee required anywhere. What we simply meant to say is "**Synchronization** is guaranteed...".
* I've add that phrase to the other methods of `OnceLock` which take a `&mut self`, to highlight the fact that having a `&mut OnceLock` guarantees that synchronization with other threads is not required. This is the same as with [`Mutex::get_mut()`](https://doc.rust-lang.org/std/sync/struct.Mutex.html#method.get_mut), [`Cell::get_mut()`](https://doc.rust-lang.org/std/cell/struct.Cell.html#method.get_mut), and others.
* In that spirit, the half-sentence "or being initialized" was removed from `get_mut()`, as there is no way that the `OnceLock` is being initialized while we are holding `&mut` to it. Probably a copy&paste from `.get()`
2025-06-03 07:03:42 +02:00
Lukas Lueg
200d742984 Clarify &mut-methods' docs on sync::OnceLock 2025-05-28 18:31:28 +02:00
Trevor Gross
5f17779a03 Rollup merge of #140369 - jplatte:mutex-rwlock-data-ptr, r=Amanieu
Add data_ptr method to Mutex and RwLock

Implementation of https://github.com/rust-lang/rust/issues/140368 / https://github.com/rust-lang/libs-team/issues/531.

I tried to write a useful safety section about when it is safe to read or write through the returned pointers, but couldn't come up with something nice. Hoping this PR is still useful without that. I'm happy to add any doc strings other people come up with if needed before merge, of course.

Unresolved questions:

- Return a `LockResult` or not?
- Return `*mut T` like existing APIs (`Cell::as_ptr` / `MaybeUninit::as[_mut]_ptr` / `Vec::as_ptr` / ...) or be more precise and return `NonNull<T>`?
2025-05-28 10:28:07 -04:00
Dannyyy93
d6dc08c3f4 docs: fix typos 2025-05-22 22:47:36 +08:00
Jonas Platte
20589bd605 Add ReentrantLock::data_ptr 2025-05-21 08:07:43 +02:00
Jonas Platte
9d6c5a88a1 Add more docs to new data_ptr methods 2025-05-21 08:07:43 +02:00
Jonas Platte
9efad3a87b Add data_ptr method to Mutex and RwLock 2025-05-21 08:07:43 +02:00
Ralf Jung
8286487c0c fix data race in ReentrantLock fallback for targets without 64bit atomics 2025-05-19 15:21:25 +02:00
Matthias Krüger
8186b71fb4 Rollup merge of #140783 - veluca93:oncelock-docs, r=jhpratt
Update documentation of OnceLock::get_or_init.

Explicitly point out that if the function panics the init function might be called multiple times.
2025-05-10 16:26:03 +02:00
Matthias Krüger
c6b9253ad5 Rollup merge of #129334 - ChayimFriedman2:more-lazy-methods, r=Amanieu
Implement (part of) ACP 429: add `DerefMut` to `Lazy[Cell/Lock]`

`DerefMut` is instantly stable, as a trait impl. That means this needs an FCP.

``@rustbot`` label +needs-fcp

https://github.com/rust-lang/libs-team/issues/429
2025-05-10 16:26:01 +02:00
Luca Versari
ae25c39f22 Update documentation of OnceLock::get_or_init.
Explicitly point out that if the function panics the init function might
be called multiple times.
2025-05-08 09:33:38 +02:00
Zachary S
d2068be4a0 Rename (Mapped)(RwLock|Mutex)Guard::try_map to filter_map.
1. analogous to std::cell::Ref(Mut)::filter_map.
2. doesn't imply `Try` genericizability.
2025-04-30 19:43:24 -05:00
Christopher Durham
4d93f60568 use generic Atomic type where possible
in core/alloc/std only for now, and ignoring test files

Co-authored-by: Pavel Grigorenko <GrigorenkoPV@ya.ru>
2025-04-27 02:18:08 +03:00
Matthias Krüger
5e8bc7f4d3 Rollup merge of #139553 - petrosagg:channel-double-free, r=RalfJung,tgross35
sync::mpsc: prevent double free on `Drop`

This PR is fixing a regression introduced by #121646 that can lead to a double free when dropping the channel.

The details of the bug can be found in the corresponding crossbeam PR https://github.com/crossbeam-rs/crossbeam/pull/1187
2025-04-18 05:16:29 +02:00
Petros Angelatos
b9e2ac5c7b sync::mpsc: prevent double free on Drop
This PR is fixing a regression introduced by #121646 that can lead to a
double free when dropping the channel.

The details of the bug can be found in the corresponding crossbeam PR
https://github.com/crossbeam-rs/crossbeam/pull/1187

Signed-off-by: Petros Angelatos <petrosagg@gmail.com>
2025-04-11 15:33:09 +03:00
Petros Angelatos
9eb6a5446a sync::mpsc: add miri reproducer of double free
Signed-off-by: Petros Angelatos <petrosagg@gmail.com>
2025-04-11 15:23:12 +03:00
Matthias Krüger
d5f930fe76 Rollup merge of #139164 - xizheyin:issue-139034, r=joboet
std: improve documentation for get_mut() methods regarding forgotten guards

Fixes #139034

This PR improves the documentation for `get_mut()` methods in `Mutex`, `RefCell`, and `RwLock` to clarify their behavior when lock guards are forgotten (e.g., via std::mem::forget).

The current documentation for these methods states that a mutable borrow "statically guarantees no locks exist", which is not entirely accurate. While a mutable borrow prevents new locks from being created, it does not clear or detect previously abandoned locks through `forget()`. This can lead to counterintuitive behavior:

https://play.rust-lang.org/?version=stable&mode=debug&edition=2024&gist=e68cefec12dcd435daf2237c16824ed3
https://play.rust-lang.org/?version=nightly&mode=debug&edition=2024&gist=81263ad652c752afd63c903113d3082c
https://play.rust-lang.org/?version=stable&mode=debug&edition=2024&gist=311baa4edb3abf82a25c8d7bf21a4a52

r? libs
2025-04-09 20:23:09 +02:00
xizheyin
0162f29436 std: clarify RwLock::get_mut more clearly
Signed-off-by: xizheyin <xizheyin@smail.nju.edu.cn>
2025-04-03 19:25:47 +08:00
xizheyin
04d9d864b3 std: clarify Mutex::get_mut more clearly
Signed-off-by: xizheyin <xizheyin@smail.nju.edu.cn>
2025-03-31 15:23:17 +08:00
Frank King
5016467a23 Implement UniqueArc 2025-03-22 15:14:49 +08:00
bors
b880760977 Auto merge of #137237 - cuviper:stage0, r=Mark-Simulacrum
Master bootstrap update

https://forge.rust-lang.org/release/process.html#master-bootstrap-update-tuesday

r? `@Mark-Simulacrum`
2025-02-23 11:12:56 +00:00
Kornel
ad566646cf Use faster thread_local in current_thread_id() 2025-02-21 13:09:16 +00:00
Josh Stone
fdba8a7c47 update version placeholders
(cherry picked from commit e4840ce59b)
2025-02-18 08:50:21 -08:00
Michael Goulet
4312d7b541 Fix pattern matching mode changes and unsafe_op_in_unsafe_fn 2025-02-09 17:11:13 +00:00
Jacob Pratt
d2aa3dec8a Rollup merge of #135621 - bjorn3:move_tests_to_stdtests, r=Noratrieb
Move some std tests to integration tests

Unit tests directly inside of standard library crates require a very fragile way of building that is hard to reproduce outside of bootstrap.

Follow up to https://github.com/rust-lang/rust/pull/133859
2025-02-04 05:36:50 -05:00
Matthias Krüger
f2b7a299d2 Rollup merge of #136289 - Pyr0de:oncecell-docs, r=tgross35
OnceCell & OnceLock docs: Using (un)initialized consistently

Changed
* `set` / `initialize` / `full` to `initialized state`
* `uninitialize` / `empty` to `uninitialized state`
* `f` to `f()`
* Added explaination of `uninitialized state` & `initialized state`

[OnceCell Docs](https://doc.rust-lang.org/nightly/std/cell/struct.OnceCell.html)
[OnceLock Docs](https://doc.rust-lang.org/nightly/std/sync/struct.OnceLock.html)

Fixes #85716
``@rustbot`` label +A-docs
2025-02-03 21:11:33 +01:00
Pyrode
f8b01b3d19 OnceCell & OnceLock docs: Using (un)initialized consistently 2025-02-03 17:48:39 +05:30
Matthias Krüger
cbcb695f9e Rollup merge of #136360 - slanterns:once_wait, r=tgross35
Stabilize `once_wait`

Closes: https://github.com/rust-lang/rust/issues/127527.

`@rustbot` label: +T-libs-api

r? libs-api
2025-02-01 16:41:04 +01:00
Matthias Krüger
9dfdef618c Rollup merge of #135684 - ranger-ross:mutex-docs, r=joboet
docs: Documented Send and Sync requirements for Mutex + MutexGuard

This an attempt to continue where #123225 left off.

I did some light clean up from the work done in that PR.
I also documented the `!Send` + `Sync` implementations for `MutexGuard` to the best of my knowledge.
Let me know if I got anything wrong 😄

fixes #122856

cc: ``@IoaNNUwU``

r? ``@joboet``
2025-02-01 16:41:03 +01:00
Ross Sullivan
3d84a49c37 docs: Documented Send and Sync requirements for Mutex + MutexGuard 2025-02-01 14:20:03 +09:00
Slanterns
6fa6168e71 stabilize once_wait 2025-02-01 02:10:02 +08:00
usamoi
05364239a8 fix doc for std::sync::mpmc 2025-01-27 11:42:16 +08:00
bjorn3
b8ae372e48 Move std::sync unit tests to integration tests
This removes two minor OnceLock tests which test private methods. The
rest of the tests should be more than enough to catch mistakes in those
private methods. Also makes ReentrantLock::try_lock public. And finally
it makes the mpmc tests actually run.
2025-01-26 10:28:05 +00:00
Aeon
c4a5e12567 Clarify note in std::sync::LazyLock example 2025-01-15 16:08:22 -05:00