fparkan/vendor/flume/tests/thread_locals.rs

54 lines
1.5 KiB
Rust
Raw Normal View History

// //! Tests that make sure accessing thread-locals while exiting the thread doesn't cause panics.
// extern crate crossbeam_utils;
// use std::thread;
// use std::time::Duration;
// use flume::unbounded;
// use crossbeam_utils::thread::scope;
// fn ms(ms: u64) -> Duration {
// Duration::from_millis(ms)
// }
// #[test]
// #[cfg_attr(target_os = "macos", ignore = "TLS is destroyed too early on macOS")]
// fn use_while_exiting() {
// struct Foo;
// impl Drop for Foo {
// fn drop(&mut self) {
// // A blocking operation after the thread-locals have been dropped. This will attempt to
// // use the thread-locals and must not panic.
// let (_s, r) = unbounded::<()>();
// select! {
// recv(r) -> _ => {}
// default(ms(100)) => {}
// }
// }
// }
// thread_local! {
// static FOO: Foo = Foo;
// }
// let (s, r) = unbounded::<()>();
// scope(|scope| {
// scope.spawn(|_| {
// // First initialize `FOO`, then the thread-locals related to crossbeam-channel.
// FOO.with(|_| ());
// r.recv().unwrap();
// // At thread exit, thread-locals related to crossbeam-channel get dropped first and
// // `FOO` is dropped last.
// });
// scope.spawn(|_| {
// thread::sleep(ms(100));
// s.send(()).unwrap();
// });
// })
// .unwrap();
// }