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/master.c | |
parent | 12b41ea402aef5b932eb0ba2c123ecd94b48f44f (diff) | |
download | biruda-5028126dc2983f78f134e3ddf85f1f8f0a96d4bd.tar.gz biruda-5028126dc2983f78f134e3ddf85f1f8f0a96d4bd.tar.bz2 |
fixed shutdown problems
Diffstat (limited to 'src/master.c')
-rw-r--r-- | src/master.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/master.c b/src/master.c index 80ce1a5..770724e 100644 --- a/src/master.c +++ b/src/master.c @@ -13,7 +13,7 @@ static pthread_t master_thread; static int master_sock; -static int master_terminate = 0; +static int master_must_terminate = 0; static void *master_func( void *thread_data ) { @@ -39,15 +39,16 @@ static void *master_func( void *thread_data ) } json_object_put( obj ); - while( !master_terminate ) { + while( !master_must_terminate ) { - printf( "master idle: %d\n", master_terminate ); + printf( "master idle: %d\n", master_must_terminate ); sleep( 1 ); char *answer = NULL; bytes = nn_recv( master_sock, &answer, NN_MSG, 0 ); if( bytes == ETIMEDOUT ) continue; + if( master_must_terminate ) continue; if( bytes >= 0 ) { printf( "master received: %s\n", answer ); nn_freemsg( answer ); @@ -55,6 +56,8 @@ static void *master_func( void *thread_data ) } (void)nn_shutdown( master_sock, 0 ); + + puts( "master disconnected" ); return NULL; } @@ -64,7 +67,7 @@ int master_init( const char *control ) pthread_attr_t attr; int res; - master_terminate = 0; + master_must_terminate = 0; res = pthread_attr_init( &attr ); if( res != 0 ) { @@ -79,12 +82,15 @@ int master_init( const char *control ) return 0; } +void master_terminate( ) +{ + master_must_terminate = 1; +} + int master_free( ) { void *result; int res; - - master_terminate = 1; res = pthread_join( master_thread, &result ); if( res != 0 ) { |