#include "thread_pool.h"
void thread_pool_clear(thread_pool_t T)
{
slong i, size;
thread_pool_entry_struct * D;
#if FLINT_USES_PTHREAD
pthread_mutex_lock(&T->mutex);
#endif
D = T->tdata;
size = T->length;
for (i = 0; i < size; i++)
{
#if FLINT_USES_PTHREAD
pthread_mutex_lock(&D[i].mutex);
#endif
FLINT_ASSERT(D[i].available == 1);
D[i].exit = 1;
#if FLINT_USES_PTHREAD
pthread_cond_signal(&D[i].sleep1);
pthread_mutex_unlock(&D[i].mutex);
pthread_join(D[i].pth, NULL);
pthread_cond_destroy(&D[i].sleep2);
pthread_cond_destroy(&D[i].sleep1);
pthread_mutex_destroy(&D[i].mutex);
#endif
}
if (D != NULL)
{
flint_free(D);
}
#if FLINT_USES_CPUSET && FLINT_USES_PTHREAD
if (T->original_affinity != NULL) {
flint_free(T->original_affinity);
T->original_affinity = NULL;
}
#endif
#if FLINT_USES_PTHREAD
pthread_mutex_unlock(&T->mutex);
pthread_mutex_destroy(&T->mutex);
#endif
T->length = -1;
T->tdata = NULL;
}