Make server shutdown more robust

This commit is contained in:
Keith Winstein
2011-09-30 03:18:25 -04:00
parent 31577a1c16
commit e817d05b22
+19 -1
View File
@@ -231,7 +231,16 @@ void serve( int host_fd )
if ( pollfds[ 2 ].revents & POLLIN ) { if ( pollfds[ 2 ].revents & POLLIN ) {
/* shutdown signal */ /* shutdown signal */
if ( network.attached() ) { struct signalfd_siginfo the_siginfo;
ssize_t bytes_read = read( pollfds[ 2 ].fd, &the_siginfo, sizeof( the_siginfo ) );
if ( bytes_read == 0 ) {
break;
} else if ( bytes_read < 0 ) {
perror( "read" );
break;
}
if ( network.attached() && (!network.shutdown_in_progress()) ) {
network.start_shutdown(); network.start_shutdown();
} else { } else {
break; break;
@@ -247,7 +256,11 @@ void serve( int host_fd )
if ( (pollfds[ 1 ].revents) if ( (pollfds[ 1 ].revents)
& (POLLERR | POLLHUP | POLLNVAL) ) { & (POLLERR | POLLHUP | POLLNVAL) ) {
/* host problem */ /* host problem */
if ( network.attached() && (!network.shutdown_in_progress()) ) {
network.start_shutdown(); network.start_shutdown();
} else {
break;
}
} }
/* quit if our shutdown has been acknowledged */ /* quit if our shutdown has been acknowledged */
@@ -255,6 +268,11 @@ void serve( int host_fd )
break; break;
} }
/* quit after shutdown acknowledgement timeout */
if ( network.shutdown_in_progress() && network.shutdown_ack_timed_out() ) {
break;
}
/* quit if we received and acknowledged a shutdown request */ /* quit if we received and acknowledged a shutdown request */
if ( network.counterparty_shutdown_ack_sent() ) { if ( network.counterparty_shutdown_ack_sent() ) {
break; break;