diff options
| author | Trevor Gross <t.gross35@gmail.com> | 2025-07-26 02:19:29 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-26 02:19:29 -0500 |
| commit | 2fcea9fb68c8e04f10e5cb15bbfb486de9800afa (patch) | |
| tree | 0e82c77e1c2b335c4998ea5c2351fc022fd9c576 | |
| parent | 75ed6de1eef96753da3497c0f6e2623cc86fc240 (diff) | |
| parent | 6f4d0bdde85f9e2a0e61bb3e16d407540ddc09ba (diff) | |
| download | rust-2fcea9fb68c8e04f10e5cb15bbfb486de9800afa.tar.gz rust-2fcea9fb68c8e04f10e5cb15bbfb486de9800afa.zip | |
Rollup merge of #143859 - orlp:thread-into-raw-align, r=jhpratt
Guarantee 8 bytes of alignment in Thread::into_raw When using `AtomicPtr` for synchronization it's incredibly useful when you've got a couple bits you can stuff metadata in. By guaranteeing that `Thread`'s `Inner` struct is aligned to 8 bytes everyone can use the bottom 3 bits to signal other things, such as a critical section, etc. This guarantee is thus very useful and costs us nothing.
| -rw-r--r-- | library/std/src/thread/mod.rs | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/library/std/src/thread/mod.rs b/library/std/src/thread/mod.rs index 6075173db47..8cd1e0163a1 100644 --- a/library/std/src/thread/mod.rs +++ b/library/std/src/thread/mod.rs @@ -1399,6 +1399,11 @@ where } /// The internal representation of a `Thread` handle +/// +/// We explicitly set the alignment for our guarantee in Thread::into_raw. This +/// allows applications to stuff extra metadata bits into the alignment, which +/// can be rather useful when working with atomics. +#[repr(align(8))] struct Inner { name: Option<ThreadNameString>, id: ThreadId, @@ -1582,7 +1587,8 @@ impl Thread { /// Consumes the `Thread`, returning a raw pointer. /// /// To avoid a memory leak the pointer must be converted - /// back into a `Thread` using [`Thread::from_raw`]. + /// back into a `Thread` using [`Thread::from_raw`]. The pointer is + /// guaranteed to be aligned to at least 8 bytes. /// /// # Examples /// |
