dataq
int dataq_enqueue(dataq_t *dataq, void *in);
int dataq_dequeue(dataq_t *dataq, void **outptr, int);
int dataq_destroy(dataq_t *dataq);
(void) ll_dequeue(&dataq->waiters);
dataq->num_waiters--;
dptr = (dataq_data_t *)ll_dequeue(&dataq->data);
dataq->num_data--;
if (dataq->num_data && dataq->num_waiters) {
sleeper = (dataq_waiter_t *)ll_peek(&dataq->waiters);
(void) pthread_mutex_unlock(&dataq->lock);
dataq_destroy(dataq_t *dataq)
(void) pthread_mutex_destroy(&dataq->lock);
ll_mapf(&dataq->data, dataq_data_destroy);
ll_mapf(&dataq->waiters, dataq_waiters_destroy);
dataq_enqueue(dataq_t *dataq, void *in)
(void) pthread_mutex_lock(&dataq->lock);
assert(dataq_check(dataq));
ll_enqueue(&dataq->data, &ptr->list);
dataq->num_data++;
if (dataq->num_waiters) {
sleeper = (dataq_waiter_t *)ll_peek(&dataq->waiters);
assert(dataq_check(dataq));
(void) pthread_mutex_unlock(&dataq->lock);
dataq_dequeue(dataq_t *dataq, void **outptr, int try)
(void) pthread_mutex_lock(&dataq->lock);
if ((dataq->num_waiters > 0) ||
((dptr = (dataq_data_t *)ll_dequeue(&dataq->data)) == NULL)) {
(void) pthread_mutex_unlock(&dataq->lock);
dataq->num_waiters++;
ll_enqueue(&dataq->waiters, &wait.list);
(void) pthread_cond_wait(&wait.cv, &dataq->lock);