- pthread_cond_broadcast(&p->input_data);
- pthread_mutex_unlock(&p->mutex);
-
- pthread_join(p->thread_id, 0);
-
- close(p->fd[0]);
- close(p->fd[1]);
- pthread_cond_destroy(&p->input_data);
- pthread_mutex_destroy(&p->mutex);
+ yaz_cond_broadcast(p->input_data);
+ yaz_mutex_leave(p->mutex);
+
+ for (i = 0; i< p->no_threads; i++)
+ yaz_thread_join(&p->thread_id[i], 0);
+
+ if (p->work_destroy)
+ {
+ queue_trav(p->input_queue, p->work_destroy);
+ queue_trav(p->output_queue, p->work_destroy);
+ }
+
+ yaz_spipe_destroy(p->spipe);
+ yaz_cond_destroy(&p->input_data);
+ yaz_mutex_destroy(&p->mutex);