aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--iemnet_receiver.c14
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);