mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 08:13:41 +00:00
Use add_spawn_hook for libtest's output capturing.
This commit is contained in:
parent
7ac4c04731
commit
ef9055f3ee
@ -502,9 +502,6 @@ impl Builder {
|
||||
});
|
||||
let their_packet = my_packet.clone();
|
||||
|
||||
let output_capture = crate::io::set_output_capture(None);
|
||||
crate::io::set_output_capture(output_capture.clone());
|
||||
|
||||
// Pass `f` in `MaybeUninit` because actually that closure might *run longer than the lifetime of `F`*.
|
||||
// See <https://github.com/rust-lang/rust/issues/101983> for more details.
|
||||
// To prevent leaks we use a wrapper that drops its contents.
|
||||
@ -542,7 +539,6 @@ impl Builder {
|
||||
imp::Thread::set_name(name);
|
||||
}
|
||||
|
||||
crate::io::set_output_capture(output_capture);
|
||||
for hook in hooks {
|
||||
hook();
|
||||
}
|
||||
|
@ -24,6 +24,7 @@
|
||||
#![feature(process_exitcode_internals)]
|
||||
#![feature(panic_can_unwind)]
|
||||
#![feature(test)]
|
||||
#![feature(thread_spawn_hook)]
|
||||
#![allow(internal_features)]
|
||||
#![warn(rustdoc::unescaped_backticks)]
|
||||
|
||||
@ -134,6 +135,16 @@ pub fn test_main(args: &[String], tests: Vec<TestDescAndFn>, options: Option<Opt
|
||||
}
|
||||
});
|
||||
panic::set_hook(hook);
|
||||
// Use a thread spawning hook to make new threads inherit output capturing.
|
||||
std::thread::add_spawn_hook(|_| {
|
||||
// Get and clone the output capture of the current thread.
|
||||
let output_capture = io::set_output_capture(None);
|
||||
io::set_output_capture(output_capture.clone());
|
||||
// Set the output capture of the new thread.
|
||||
Ok(|| {
|
||||
io::set_output_capture(output_capture);
|
||||
})
|
||||
});
|
||||
}
|
||||
let res = console::run_tests_console(&opts, tests);
|
||||
// Prevent Valgrind from reporting reachable blocks in users' unit tests.
|
||||
|
Loading…
Reference in New Issue
Block a user