Convert the object wait queue to a standard list.

diff --git a/server/thread.c b/server/thread.c
index de23684..a2a232d 100644
--- a/server/thread.c
+++ b/server/thread.c
@@ -342,22 +342,15 @@
 int add_queue( struct object *obj, struct wait_queue_entry *entry )
 {
     grab_object( obj );
-    entry->obj    = obj;
-    entry->prev   = obj->tail;
-    entry->next   = NULL;
-    if (obj->tail) obj->tail->next = entry;
-    else obj->head = entry;
-    obj->tail = entry;
+    entry->obj = obj;
+    list_add_tail( &obj->wait_queue, &entry->entry );
     return 1;
 }
 
 /* remove a thread from an object wait queue */
 void remove_queue( struct object *obj, struct wait_queue_entry *entry )
 {
-    if (entry->next) entry->next->prev = entry->prev;
-    else obj->tail = entry->prev;
-    if (entry->prev) entry->prev->next = entry->next;
-    else obj->head = entry->next;
+    list_remove( &entry->entry );
     release_object( obj );
 }
 
@@ -569,13 +562,12 @@
 /* attempt to wake threads sleeping on the object wait queue */
 void wake_up( struct object *obj, int max )
 {
-    struct wait_queue_entry *entry = obj->head;
+    struct list *ptr, *next;
 
-    while (entry)
+    LIST_FOR_EACH_SAFE( ptr, next, &obj->wait_queue )
     {
-        struct thread *thread = entry->thread;
-        entry = entry->next;
-        if (wake_thread( thread ))
+        struct wait_queue_entry *entry = LIST_ENTRY( ptr, struct wait_queue_entry, entry );
+        if (wake_thread( entry->thread ))
         {
             if (max && !--max) break;
         }