2
0
Fork 0

fix waitqueue

personal/stbuehler/wip
Thomas Porzelt 2008-11-23 18:23:05 +01:00
parent 865aea2ce0
commit d5e7aa94a5
1 changed files with 10 additions and 7 deletions

View File

@ -34,8 +34,9 @@ void waitqueue_push(waitqueue *queue, waitqueue_elem *elem) {
elem->ts = ev_now(queue->loop);
if (!elem->queued) {
elem->queued = TRUE;
/* not in the queue yet, insert at the end */
elem->queued = TRUE;
if (!queue->head) {
/* queue is empty */
queue->head = elem;
@ -54,12 +55,12 @@ void waitqueue_push(waitqueue *queue, waitqueue_elem *elem) {
if (elem == queue->tail)
return;
if (elem == queue->head) {
if (elem == queue->head)
queue->head = elem->next;
if (elem->next)
elem->next->prev = NULL;
}
else
elem->prev->next = elem->next;
elem->next->prev = elem->prev;
elem->prev = queue->tail;
elem->next = NULL;
queue->tail->next = elem;
@ -75,7 +76,9 @@ waitqueue_elem *waitqueue_pop(waitqueue *queue) {
return NULL;
}
if (elem != queue->tail)
if (elem == queue->tail)
queue->tail = NULL;
else
elem->next->prev = NULL;
queue->head = elem->next;