Bug: 310600229

Clone this repo:
  1. 8332e9e Merge remote-tracking branch 'origin/upstream' am: 68bc564c6f am: 280eea6ea8 am: dca6b7a419 by Inna Palant · 5 months ago android14-qpr2-release android14-qpr2-s1-release android14-qpr2-s2-release android14-qpr2-s3-release main android-14.0.0_r28 android-14.0.0_r29 android-14.0.0_r30 android-14.0.0_r31 android-14.0.0_r32 android-14.0.0_r33
  2. dca6b7a Merge remote-tracking branch 'origin/upstream' am: 68bc564c6f am: 280eea6ea8 by Inna Palant · 5 months ago
  3. 280eea6 Merge remote-tracking branch 'origin/upstream' am: 68bc564c6f by Inna Palant · 5 months ago
  4. 68bc564 Merge remote-tracking branch 'origin/upstream' Import b/310600229 by Inna Palant · 5 months ago simpleperf-release platform-tools-34.0.5
  5. e785511 Import 'fragile' crate by Martin Geisler · 6 months ago upstream

Fragile

Build Status Crates.io License rustc 1.42.0 Documentation

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.

Example

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();

License and Links