From 6edc04ed1ccde248d30f640dcdb6697098e2c1ba Mon Sep 17 00:00:00 2001 From: Keegan McAllister Date: Sat, 5 May 2012 01:48:50 -0400 Subject: [PATCH] mosh-server: Ignore signals rather than blocking them For pselect() we want to mess with the signal mask, and this is closer to our intent anyway. --- src/frontend/mosh-server.cc | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/frontend/mosh-server.cc b/src/frontend/mosh-server.cc index becc829..c1b3fdf 100644 --- a/src/frontend/mosh-server.cc +++ b/src/frontend/mosh-server.cc @@ -319,12 +319,12 @@ int run_server( const char *desired_ip, const char *desired_port, fflush( stdout ); /* don't let signals kill us */ - sigset_t signals_to_block; - - fatal_assert( sigemptyset( &signals_to_block ) == 0 ); - fatal_assert( sigaddset( &signals_to_block, SIGHUP ) == 0 ); - fatal_assert( sigaddset( &signals_to_block, SIGPIPE ) == 0 ); - fatal_assert( sigprocmask( SIG_BLOCK, &signals_to_block, NULL ) == 0 ); + struct sigaction sa; + sa.sa_handler = SIG_IGN; + sa.sa_flags = 0; + fatal_assert( 0 == sigfillset( &sa.sa_mask ) ); + fatal_assert( 0 == sigaction( SIGHUP, &sa, NULL ) ); + fatal_assert( 0 == sigaction( SIGPIPE, &sa, NULL ) ); struct termios child_termios; @@ -388,10 +388,13 @@ int run_server( const char *desired_ip, const char *desired_port, stdout = fdopen( STDOUT_FILENO, "w" ); stderr = fdopen( STDERR_FILENO, "w" ); - /* unblock signals */ - sigset_t signals_to_block; - fatal_assert( sigemptyset( &signals_to_block ) == 0 ); - fatal_assert( sigprocmask( SIG_SETMASK, &signals_to_block, NULL ) == 0 ); + /* reenable signals */ + struct sigaction sa; + sa.sa_handler = SIG_DFL; + sa.sa_flags = 0; + fatal_assert( 0 == sigfillset( &sa.sa_mask ) ); + fatal_assert( 0 == sigaction( SIGHUP, &sa, NULL ) ); + fatal_assert( 0 == sigaction( SIGPIPE, &sa, NULL ) ); /* close server-related file descriptors */ delete network;