Repository: mesos Updated Branches: refs/heads/master 9a675a121 -> e983d6ae3
Ignore SIGPIPE in libevent execution thread using SUPPRESS. This fixes a Broken Pipe after unblocking SIGPIPE. Review: https://reviews.apache.org/r/38835 Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/e983d6ae Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/e983d6ae Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/e983d6ae Branch: refs/heads/master Commit: e983d6ae3cdad25d60520daf76e6ad37533abe4d Parents: 9a675a1 Author: Joris Van Remoortere <[email protected]> Authored: Mon Sep 28 14:25:29 2015 -0700 Committer: Joris Van Remoortere <[email protected]> Committed: Mon Sep 28 18:54:37 2015 -0700 ---------------------------------------------------------------------- 3rdparty/libprocess/src/libevent.cpp | 40 +++++++++++++------------------ 1 file changed, 17 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/e983d6ae/3rdparty/libprocess/src/libevent.cpp ---------------------------------------------------------------------- diff --git a/3rdparty/libprocess/src/libevent.cpp b/3rdparty/libprocess/src/libevent.cpp index 00e0f08..7b4299d 100644 --- a/3rdparty/libprocess/src/libevent.cpp +++ b/3rdparty/libprocess/src/libevent.cpp @@ -100,32 +100,26 @@ void EventLoop::run() // Block SIGPIPE in the event loop because we can not force // underlying implementations such as SSL bufferevents to use // MSG_NOSIGNAL. - bool unblock = os::signals::block(SIGPIPE); - - do { - int result = event_base_loop(base, EVLOOP_ONCE); - if (result < 0) { - LOG(FATAL) << "Failed to run event loop"; - } else if (result > 0) { - // All events are handled, continue event loop. - continue; - } else { - CHECK_EQ(0, result); - if (event_base_got_break(base)) { - break; - } else if (event_base_got_exit(base)) { - break; + SUPPRESS(SIGPIPE) { + do { + int result = event_base_loop(base, EVLOOP_ONCE); + if (result < 0) { + LOG(FATAL) << "Failed to run event loop"; + } else if (result > 0) { + // All events are handled, continue event loop. + continue; + } else { + CHECK_EQ(0, result); + if (event_base_got_break(base)) { + break; + } else if (event_base_got_exit(base)) { + break; + } } - } - } while (true); + } while (true); + } __in_event_loop__ = false; - - if (unblock) { - if (!os::signals::unblock(SIGPIPE)) { - LOG(FATAL) << "Failure to unblock SIGPIPE"; - } - } }
