summaryrefslogtreecommitdiff
path: root/src/coordinator.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/coordinator.c
parent12b41ea402aef5b932eb0ba2c123ecd94b48f44f (diff)
downloadbiruda-5028126dc2983f78f134e3ddf85f1f8f0a96d4bd.tar.gz
biruda-5028126dc2983f78f134e3ddf85f1f8f0a96d4bd.tar.bz2
fixed shutdown problems
Diffstat (limited to 'src/coordinator.c')
-rw-r--r--src/coordinator.c20
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 ) {