X-Git-Url: https://git.liburcu.org/?p=ust.git;a=blobdiff_plain;f=libustconsumer%2Flibustconsumer.c;h=b47f04ab08779ce03db1f5f845110ef9f13ca172;hp=abf21d801ca1473fd8b1b3c1453636361fc0199a;hb=ebb0b9c112a0583504922a9451571b648d67a6de;hpb=5343b2860738c675311ce5949bdf9e31afc76fa4 diff --git a/libustconsumer/libustconsumer.c b/libustconsumer/libustconsumer.c index abf21d8..b47f04a 100644 --- a/libustconsumer/libustconsumer.c +++ b/libustconsumer/libustconsumer.c @@ -543,6 +543,10 @@ void *consumer_thread(void *arg) int result; sigset_t sigset; + pthread_mutex_lock(&args->instance->mutex); + args->instance->active_threads++; + pthread_mutex_unlock(&args->instance->mutex); + if(args->instance->callbacks->on_new_thread) args->instance->callbacks->on_new_thread(args->instance->callbacks); @@ -584,6 +588,10 @@ void *consumer_thread(void *arg) if(args->instance->callbacks->on_close_thread) args->instance->callbacks->on_close_thread(args->instance->callbacks); + pthread_mutex_lock(&args->instance->mutex); + args->instance->active_threads--; + pthread_mutex_unlock(&args->instance->mutex); + free((void *)args->channel); free(args); return NULL; @@ -735,7 +743,7 @@ int ustconsumer_start_instance(struct ustconsumer_instance *instance) if (instance->quit_program) { pthread_mutex_lock(&instance->mutex); - if(instance->active_buffers == 0) { + if (instance->active_buffers == 0 && instance->active_threads == 0) { pthread_mutex_unlock(&instance->mutex); break; }