commit | 0916c5f23fd03f6758987f7a095e680a356be0d1 | [log] [tgz] |
---|---|---|
author | Ronish Kalia <[email protected]> | Wed Feb 14 14:29:24 2024 +0000 |
committer | Ronish Kalia <[email protected]> | Wed Feb 14 14:29:24 2024 +0000 |
tree | ccea653d60b528a4d79bcf8c05006ad531bb15c2 | |
parent | 8332e9e607eb545f0153ae52fbfb47d97244f894 [diff] |
[DON'T BLOCK] Test ownership migration rules This CL is created as a best effort to migrate test targets to the new android ownership model. If you find incorrect or unnecessary attribution in this CL, please create a separate CL to fix that. For more details please refer to the link below, <add g3 doc link> Bug: 304529413 Test: N/A Change-Id: Ia0d57705ea79edf5232d2932b12d554fa4d13372
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();