From 62c1d999e1361fc68ee4e54865b205415fa0a38d Mon Sep 17 00:00:00 2001 From: Rachel K Date: Tue, 12 Mar 2019 19:44:47 +0000 Subject: Fix signal handling on Unix systems This removes the the signal handling machinery in tty::unix, and replaces it with functionality from signal-hook, which should be more robust. Signals caught by signal-hook wake up the existing I/O event loop, which then delegates back to the PTY to handle them. In particular, this allows `SIGCHLD` (i.e. child process exits) to shut down the terminal promptly, instead of sometimes leaving the window lingering. Fixes #915. Fixes #1276. Fixes #1313. As a side effect, this fixes a very rare bug on Linux, where a `read` from the PTY on the master side would sometimes "fail" with `EIO` if the child closed the client side at a particular moment. This was subject to a race condition, and was very difficult to trigger in practice. --- src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 0c7a6b49..4f569cf5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -236,7 +236,7 @@ fn run( } // Begin shutdown if the flag was raised - if terminal_lock.should_exit() { + if terminal_lock.should_exit() || tty::process_should_exit() { break; } -- cgit v1.2.3-54-g00ecf