Lines Matching defs:p_thread_pool

58 	cl_thread_pool_t *p_thread_pool = (cl_thread_pool_t *) context;
61 pthread_mutex_lock(&p_thread_pool->mutex);
62 pthread_cleanup_push(cleanup_mutex, p_thread_pool);
63 while (!p_thread_pool->events)
64 pthread_cond_wait(&p_thread_pool->cond,
65 &p_thread_pool->mutex);
66 p_thread_pool->events--;
69 (*p_thread_pool->pfn_callback) (p_thread_pool->context);
75 cl_status_t cl_thread_pool_init(IN cl_thread_pool_t * const p_thread_pool,
82 CL_ASSERT(p_thread_pool);
85 memset(p_thread_pool, 0, sizeof(*p_thread_pool));
90 pthread_mutex_init(&p_thread_pool->mutex, NULL);
91 pthread_cond_init(&p_thread_pool->cond, NULL);
93 p_thread_pool->events = 0;
95 p_thread_pool->pfn_callback = pfn_callback;
96 p_thread_pool->context = context;
98 p_thread_pool->tid = calloc(count, sizeof(*p_thread_pool->tid));
99 if (!p_thread_pool->tid) {
100 cl_thread_pool_destroy(p_thread_pool);
104 p_thread_pool->running_count = count;
107 if (pthread_create(&p_thread_pool->tid[i], NULL,
108 thread_pool_routine, p_thread_pool) != 0) {
109 cl_thread_pool_destroy(p_thread_pool);
117 void cl_thread_pool_destroy(IN cl_thread_pool_t * const p_thread_pool)
121 CL_ASSERT(p_thread_pool);
123 for (i = 0; i < p_thread_pool->running_count; i++)
124 if (p_thread_pool->tid[i])
125 pthread_cancel(p_thread_pool->tid[i]);
127 for (i = 0; i < p_thread_pool->running_count; i++)
128 if (p_thread_pool->tid[i])
129 pthread_join(p_thread_pool->tid[i], NULL);
131 p_thread_pool->running_count = 0;
133 free(p_thread_pool->tid);
135 pthread_cond_destroy(&p_thread_pool->cond);
136 pthread_mutex_destroy(&p_thread_pool->mutex);
138 p_thread_pool->events = 0;
141 cl_status_t cl_thread_pool_signal(IN cl_thread_pool_t * const p_thread_pool)
144 CL_ASSERT(p_thread_pool);
145 pthread_mutex_lock(&p_thread_pool->mutex);
146 p_thread_pool->events++;
147 ret = pthread_cond_signal(&p_thread_pool->cond);
148 pthread_mutex_unlock(&p_thread_pool->mutex);