From 41a7818b552aef9e6e0bf788089f6ae16ae1e421 Mon Sep 17 00:00:00 2001 From: Christian Cunningham Date: Fri, 26 Aug 2022 23:27:46 -0700 Subject: Mutex wait queues --- kernel/lib/queue.c | 43 ++++++------------------------------------- 1 file changed, 6 insertions(+), 37 deletions(-) (limited to 'kernel/lib/queue.c') diff --git a/kernel/lib/queue.c b/kernel/lib/queue.c index 1fc35f6..38ef8cf 100644 --- a/kernel/lib/queue.c +++ b/kernel/lib/queue.c @@ -1,55 +1,24 @@ #include void push_to_queue(struct Entry* e, struct Queue* q) -{ - q->end.next->next = e; - q->end.next = e; - e->next = &q->end; -} - -void prepend_to_queue(struct Entry* e, struct Queue* q) { e->next = q->start.next; q->start.next = e; - if (e->next->entry_type == END_ENTRY) - q->end.next = e; } struct Entry* pop_from_queue(struct Queue* q) { - if (q->start.next->entry_type == END_ENTRY) + if (q->start.next == 0) return 0; struct Entry* e = q->start.next; q->start.next = e->next; - if (e->next->entry_type == END_ENTRY) - q->end.next = &q->start; return e; } -struct Entry* remove_next_from_queue(struct Entry* e) -{ - struct Entry* prev = e; - struct Entry* remove = e->next; - struct Entry* next = remove->next; - if (remove->entry_type != VALUE_ENTRY) +struct Entry* remove_next_from_queue(struct Entry* e) { + if (e->next == 0) return 0; - prev->next = next; - if (next->entry_type == END_ENTRY) - next->next = prev; - return remove; -} - -struct Entry* find_value(void* value, struct Queue* q) -{ - struct Entry* prev; - struct Entry* entry; - prev = &q->start; - entry = prev->next; - while (entry->entry_type != END_ENTRY) { - if (entry->value == value) - return prev; - prev = entry; - entry = prev->next; - } - return 0; + struct Entry* next = e->next; + e->next = next->next; + return next; } -- cgit v1.2.1