From b7b21e73a42d01698434b484589f6bcb0befb721 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 2 Jan 2014 14:10:28 +0100 Subject: [SERVER] SIGHUP triggers reload aswell. Some changes to server shutdown function. --- src/server/server.c | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/src/server/server.c b/src/server/server.c index 5bbea91..cf7e080 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -119,44 +119,40 @@ void dnbd3_cleanup() } socket_count = 0; - altservers_shutdown(); - - // Terminate all uplinks - image_killUplinks(); - - // Terminate integrity checker - integrity_shutdown(); - - // Clean up clients + // Kill connection to all clients spin_lock( &_clients_lock ); for (i = 0; i < _num_clients; ++i) { if ( _clients[i] == NULL ) continue; dnbd3_client_t * const client = _clients[i]; spin_lock( &client->lock ); - if ( client->sock >= 0 ) close( client->sock ); - client->sock = -1; + if ( client->sock >= 0 ) shutdown( client->sock, SHUT_RDWR ); spin_unlock( &client->lock ); } spin_unlock( &_clients_lock ); - count = -1; - while ( count != 0 ) { + + // Terminate the altserver checking thread + altservers_shutdown(); + + // Terminate all uplinks + image_killUplinks(); + + // Terminate integrity checker + integrity_shutdown(); + + // Wait for clients to disconnect + do { count = 0; spin_lock( &_clients_lock ); for (i = 0; i < _num_clients; ++i) { if ( _clients[i] == NULL ) continue; - if ( _clients[i]->running ) { - count++; - } else { - _clients[i] = NULL; - dnbd3_free_client( _clients[i] ); - } + count++; } spin_unlock( &_clients_lock ); if ( count != 0 ) { printf( "%d clients still active...\n", count ); sleep( 1 ); } - } + } while ( count != 0 ); _num_clients = 0; // Clean up images @@ -299,6 +295,7 @@ int main(int argc, char *argv[]) signal( SIGTERM, dnbd3_handle_signal ); signal( SIGINT, dnbd3_handle_signal ); signal( SIGUSR1, dnbd3_handle_signal ); + signal( SIGHUP, dnbd3_handle_signal ); signal( SIGUSR2, dnbd3_handle_signal ); printf( "Loading images....\n" ); @@ -495,7 +492,7 @@ static void dnbd3_handle_signal(int signum) { if ( signum == SIGINT || signum == SIGTERM ) { _shutdown = TRUE; - } else if ( signum == SIGUSR1 ) { + } else if ( signum == SIGUSR1 || signum == SIGHUP ) { _doReload = TRUE; } else if ( signum == SIGUSR2 ) { _printStats = TRUE; -- cgit v1.2.3-55-g7522