From 88f718341ec279738c07f83289058aadf7c5d235 Mon Sep 17 00:00:00 2001 From: Eric Reed Date: Thu, 8 Aug 2013 17:04:19 -0700 Subject: [PATCH] Instruct event loops to ignore SIGPIPE when constructed. libuv does not always catch SIGPIPE. --- src/libstd/rt/uv/uvll.rs | 1 + src/rt/rust_uv.cpp | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/src/libstd/rt/uv/uvll.rs b/src/libstd/rt/uv/uvll.rs index 65c0cffe5a07..8ed1287fe010 100644 --- a/src/libstd/rt/uv/uvll.rs +++ b/src/libstd/rt/uv/uvll.rs @@ -172,6 +172,7 @@ fn request_sanity_check() { } } +// XXX Event loops ignore SIGPIPE by default. pub unsafe fn loop_new() -> *c_void { #[fixed_stack_segment]; #[inline(never)]; diff --git a/src/rt/rust_uv.cpp b/src/rt/rust_uv.cpp index 0462789af9ff..b5d6e02b46a4 100644 --- a/src/rt/rust_uv.cpp +++ b/src/rt/rust_uv.cpp @@ -13,12 +13,21 @@ #include #endif +#ifndef __WIN32__ +// for signal +#include +#endif + #include "uv.h" #include "rust_globals.h" extern "C" void* rust_uv_loop_new() { +// XXX libuv doesn't always ignore SIGPIPE even though we don't need it. +#ifndef __WIN32__ + signal(SIGPIPE, SIG_IGN); +#endif return (void*)uv_loop_new(); }