summaryrefslogtreecommitdiff
path: root/src/master.c
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2014-09-14 10:10:15 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2014-09-14 10:10:15 +0200
commit5028126dc2983f78f134e3ddf85f1f8f0a96d4bd (patch)
tree7fe2973510c00a1a4552a3f45ddeda4f8c2bff19 /src/master.c
parent12b41ea402aef5b932eb0ba2c123ecd94b48f44f (diff)
downloadbiruda-5028126dc2983f78f134e3ddf85f1f8f0a96d4bd.tar.gz
biruda-5028126dc2983f78f134e3ddf85f1f8f0a96d4bd.tar.bz2
fixed shutdown problems
Diffstat (limited to 'src/master.c')
-rw-r--r--src/master.c18
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 ) {