commit | 3edf35698a8c815b4f5dabff767f32800f4bc29d | [log] [tgz] |
---|---|---|
author | Xin Li <[email protected]> | Mon May 20 07:56:49 2024 +0000 |
committer | Automerger Merge Worker <[email protected]> | Mon May 20 07:56:49 2024 +0000 |
tree | 63304b1ef3a96d0cbde883bdebb3cea3fd227863 | |
parent | 261f681a9d3d6cc7a7b57558a26a03d0540d008a [diff] | |
parent | 27119c99d02b711f8a2f463111e24dffc5f72463 [diff] |
[automerger skipped] Merge Android 24Q2 Release (ab/11526283) to aosp-main-future am: 27119c99d0 -s ours am skip reason: Merged-In Ia0d57705ea79edf5232d2932b12d554fa4d13372 with SHA-1 0916c5f23f is already in history Original change: https://googleplex-android-review.googlesource.com/c/platform/external/rust/crates/fragile/+/27273901 Change-Id: I4f363809bd0bc6241dc0596cfb2182f268675a70 Signed-off-by: Automerger Merge Worker <[email protected]>
This library provides wrapper types that permit sending non Send types to other threads and use runtime checks to ensure safety.
It provides the Fragile<T>
, Sticky<T>
and SemiSticky<T>
types which are similar in nature but have different behaviors with regards to how destructors are executed. The Fragile<T>
will panic if the destructor is called in another thread, Sticky<T>
will temporarily leak the object until the thread shuts down. SemiSticky<T>
is a compromise of the two. It behaves like Sticky<T>
but it avoids the use of thread local storage if the type does not need Drop
.
use std::thread; // creating and using a fragile object in the same thread works let val = Fragile::new(true); assert_eq!(*val.get(), true); assert!(val.try_get().is_ok()); // once send to another thread it stops working thread::spawn(move || { assert!(val.try_get().is_err()); }).join() .unwrap();