diff options
-rw-r--r-- | iemnet_receiver.c | 14 |
1 files changed, 9 insertions, 5 deletions
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); |