Skip to content

Commit

Permalink
Prevent EPIPE causing ICEs in rustc and rustdoc
Browse files Browse the repository at this point in the history
  • Loading branch information
varkor committed Apr 11, 2018
1 parent 4b9b70c commit 7ab31f6
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 3 deletions.
12 changes: 12 additions & 0 deletions src/librustc_driver/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -548,6 +548,18 @@ fn run_compiler_impl<'a>(args: &[String],
(result, Some(sess))
}

#[cfg(unix)]
pub fn set_sigpipe_handler() {
unsafe {
// Set the SIGPIPE signal handler, so that an EPIPE
// will cause rustc to terminate, as expected.
assert!(libc::signal(libc::SIGPIPE, libc::SIG_DFL) != libc::SIG_ERR);
}
}

#[cfg(windows)]
pub fn set_sigpipe_handler() {}

// Extract output directory and file from matches.
fn make_output(matches: &getopts::Matches) -> (Option<PathBuf>, Option<PathBuf>) {
let odir = matches.opt_str("out-dir").map(|o| PathBuf::from(&o));
Expand Down
1 change: 1 addition & 0 deletions src/librustdoc/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ struct Output {

pub fn main() {
const STACK_SIZE: usize = 32_000_000; // 32MB
rustc_driver::set_sigpipe_handler();
env_logger::init();
let res = std::thread::Builder::new().stack_size(STACK_SIZE).spawn(move || {
syntax::with_globals(move || {
Expand Down
4 changes: 2 additions & 2 deletions src/libstd/sys/unix/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,11 @@ pub fn init() {
reset_sigpipe();
}

#[cfg(not(any(target_os = "emscripten", target_os="fuchsia")))]
#[cfg(not(any(target_os = "emscripten", target_os = "fuchsia")))]
unsafe fn reset_sigpipe() {
assert!(signal(libc::SIGPIPE, libc::SIG_IGN) != libc::SIG_ERR);
}
#[cfg(any(target_os = "emscripten", target_os="fuchsia"))]
#[cfg(any(target_os = "emscripten", target_os = "fuchsia"))]
unsafe fn reset_sigpipe() {}
}

Expand Down
5 changes: 4 additions & 1 deletion src/rustc/rustc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,7 @@ extern {}

extern crate rustc_driver;

fn main() { rustc_driver::main() }
fn main() {
rustc_driver::set_sigpipe_handler();
rustc_driver::main()
}

0 comments on commit 7ab31f6

Please sign in to comment.