void _enqueue(queue_head_t *q, thread_state_t *new) { if(!q) { fprintf(stderr, "null q in _enqueue\n"); abort(); } if(q->head) { new->prev = q->tail; q->tail->next = new; q->tail = new; } else { q->head = new; q->tail = new; new->next = NULL; new->prev = NULL; } } thread_state_t *_dequeue(queue_head_t *q) { thread_state_t *r = NULL; if(!q) { fprintf(stderr, "null q in _dequeue\n"); abort(); } if(q->head) { r = q->head; q->head = r->next; if(q->head == NULL) { q->tail = NULL; } } return r; }