From 244ccc03740247021891a7bcc57c0aa475a77923 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Mon, 23 Aug 2010 14:35:46 +0000 Subject: on read termination read the status variables in a protected area svn path=/trunk/externals/iem/iemnet/; revision=13889 --- iemnet_receiver.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'iemnet_receiver.c') diff --git a/iemnet_receiver.c b/iemnet_receiver.c index 3a7ba41..7118f00 100644 --- a/iemnet_receiver.c +++ b/iemnet_receiver.c @@ -85,20 +85,23 @@ static void*iemnet__receiver_readthread(void*arg) { iemnet_signalNewData(receiver); } + // oha + DEBUG("readthread loop termination: %d", result); if(result>=0)iemnet_signalNewData(receiver); receiver->running=0; //fprintf(stderr, "read thread terminated\n"); - pthread_exit(NULL); return NULL; } /* callback from Pd's main thread to fetch queued data */ static void iemnet__receiver_tick(t_iemnet_receiver *x) { + int running=0, keepreceiving=0; // received data t_iemnet_chunk*c=queue_pop_noblock(x->queue); + while(NULL!=c) { (x->callback)(x->userdata, c); iemnet__chunk_destroy(c); @@ -107,14 +110,16 @@ static void iemnet__receiver_tick(t_iemnet_receiver *x) DEBUG("tick cleanup"); pthread_mutex_lock(&x->newdatamtx); x->newdataflag=0; + running = x->running; + keepreceiving=x->keepreceiving; pthread_mutex_unlock(&x->newdatamtx); - DEBUG("tick running %d", x->running); - if(!x->running) { + DEBUG("tick running %d (%d)", running, keepreceiving); + if(!running) { // read terminated /* keepreceiving is set, if receiver is not yet in shutdown mode */ - if(x->keepreceiving) + if(keepreceiving) x->callback(x->userdata, NULL); } DEBUG("tick DONE"); @@ -186,7 +191,6 @@ void iemnet__receiver_destroy(t_iemnet_receiver*rec) { pthread_join(rec->thread, NULL); - // empty the queue DEBUG("[%d] tick %d", inst, rec->running); iemnet__receiver_tick(rec); -- cgit v1.2.1