diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2014-09-14 10:10:15 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2014-09-14 10:10:15 +0200 |
commit | 5028126dc2983f78f134e3ddf85f1f8f0a96d4bd (patch) | |
tree | 7fe2973510c00a1a4552a3f45ddeda4f8c2bff19 /src/coordinator.c | |
parent | 12b41ea402aef5b932eb0ba2c123ecd94b48f44f (diff) | |
download | biruda-5028126dc2983f78f134e3ddf85f1f8f0a96d4bd.tar.gz biruda-5028126dc2983f78f134e3ddf85f1f8f0a96d4bd.tar.bz2 |
fixed shutdown problems
Diffstat (limited to 'src/coordinator.c')
-rw-r--r-- | src/coordinator.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/coordinator.c b/src/coordinator.c index ebdfdfc..4bd2f0b 100644 --- a/src/coordinator.c +++ b/src/coordinator.c @@ -13,7 +13,7 @@ static pthread_t coordinator_thread; static int coordinator_sock; -static int coordinator_terminate = 0; +static int coordinator_must_terminate = 0; static void *coordinator_func( void *thread_data ) { @@ -27,14 +27,15 @@ static void *coordinator_func( void *thread_data ) sleep( 1 ); - while( !coordinator_terminate ) { - printf( "coordinator idle: %d\n", coordinator_terminate ); + while( !coordinator_must_terminate ) { + printf( "coordinator idle: %d\n", coordinator_must_terminate ); sleep( 1 ); char *answer = NULL; int bytes = nn_recv( coordinator_sock, &answer, NN_MSG, 0 ); if( bytes == ETIMEDOUT ) continue; + if( coordinator_must_terminate ) continue; if( bytes >= 0 ) { printf( "coordinator received: %s\n", answer ); nn_freemsg( answer ); @@ -57,6 +58,8 @@ static void *coordinator_func( void *thread_data ) } (void)nn_shutdown( coordinator_sock, 0 ); + + puts( "coordinator disconnected" ); return NULL; } @@ -66,7 +69,7 @@ int coordinator_init( const char *control ) pthread_attr_t attr; int res; - coordinator_terminate = 0; + coordinator_must_terminate = 0; res = pthread_attr_init( &attr ); if( res != 0 ) { @@ -81,12 +84,17 @@ int coordinator_init( const char *control ) return 0; } +void coordinator_terminate( ) +{ + coordinator_must_terminate = 1; + + nn_term( ); +} + int coordinator_free( ) { void *result; int res; - - coordinator_terminate = 1; res = pthread_join( coordinator_thread, &result ); if( res != 0 ) { |