Fix a segfault in the rustuv tests

The details can be found in the comments I added to the test, but the gist of it
is that capturing output injects rescheduling a green task on failure, which
wasn't desired for the test in question.

cc #12340
This commit is contained in:
Alex Crichton 2014-02-17 14:41:33 -08:00
parent 47c31831a3
commit fd2ed71dcc
2 changed files with 12 additions and 1 deletions

View File

@ -168,6 +168,18 @@ mod test {
#[test] #[should_fail]
fn smoke_fail() {
// By default, the test harness is capturing our stderr output through a
// channel. This means that when we start failing and "print" our error
// message, we could be switched to running on another test. The
// IdleWatcher assumes that we're already running on the same task, so
// it can cause serious problems and internal race conditions.
//
// To fix this bug, we just set our stderr to a null writer which will
// never reschedule us, so we're guaranteed to stay on the same
// task/event loop.
use std::io;
drop(io::stdio::set_stderr(~io::util::NullWriter));
let (mut idle, _chan) = mk(1);
idle.resume();
fail!();

View File

@ -433,7 +433,6 @@ fn local_loop() -> &'static mut uvio::UvIoFactory {
#[cfg(test)]
mod test {
use std::cast::transmute;
use std::ptr;
use std::unstable::run_in_bare_thread;
use super::{slice_to_uv_buf, Loop};