Removed client-side wait functions; all waiting is now done through
the server.

diff --git a/scheduler/event.c b/scheduler/event.c
index 552568d..30a1c76 100644
--- a/scheduler/event.c
+++ b/scheduler/event.c
@@ -18,69 +18,17 @@
 typedef struct
 {
     K32OBJ        header;
-    THREAD_QUEUE  wait_queue;
-    BOOL32        manual_reset;
-    BOOL32        signaled;
 } EVENT;
 
-static BOOL32 EVENT_Signaled( K32OBJ *obj, DWORD thread_id );
-static BOOL32 EVENT_Satisfied( K32OBJ *obj, DWORD thread_id );
-static void EVENT_AddWait( K32OBJ *obj, DWORD thread_id );
-static void EVENT_RemoveWait( K32OBJ *obj, DWORD thread_id );
 static void EVENT_Destroy( K32OBJ *obj );
 
 const K32OBJ_OPS EVENT_Ops =
 {
-    EVENT_Signaled,     /* signaled */
-    EVENT_Satisfied,    /* satisfied */
-    EVENT_AddWait,      /* add_wait */
-    EVENT_RemoveWait,   /* remove_wait */
-    NULL,               /* read */
-    NULL,               /* write */
     EVENT_Destroy       /* destroy */
 };
 
 
 /***********************************************************************
- *           EVENT_Set
- *
- * Implementation of SetEvent. Used by ExitThread and ExitProcess.
- */
-void EVENT_Set( K32OBJ *obj )
-{
-    EVENT *event = (EVENT *)obj;
-    assert( obj->type == K32OBJ_EVENT );
-    SYSTEM_LOCK();
-    event->signaled = TRUE;
-    SYNC_WakeUp( &event->wait_queue, event->manual_reset ? INFINITE32 : 1 );
-    SYSTEM_UNLOCK();
-}
-
-/***********************************************************************
- *           EVENT_Create
- *
- * Partial implementation of CreateEvent.
- * Used internally by processes and threads.
- */
-K32OBJ *EVENT_Create( BOOL32 manual_reset, BOOL32 initial_state )
-{
-    EVENT *event;
-
-    SYSTEM_LOCK();
-    if ((event = HeapAlloc( SystemHeap, 0, sizeof(*event) )))
-    {
-        event->header.type     = K32OBJ_EVENT;
-        event->header.refcount = 1;
-        event->wait_queue      = NULL;
-        event->manual_reset    = manual_reset;
-        event->signaled        = initial_state;
-    }
-    SYSTEM_UNLOCK();
-    return event ? &event->header : NULL;
-}
-
-
-/***********************************************************************
  *           CreateEvent32A    (KERNEL32.156)
  */
 HANDLE32 WINAPI CreateEvent32A( SECURITY_ATTRIBUTES *sa, BOOL32 manual_reset,
@@ -99,20 +47,15 @@
     CLIENT_SendRequest( REQ_CREATE_EVENT, -1, 2, &req, sizeof(req), name, len );
     CLIENT_WaitReply( &len, NULL, 1, &reply, sizeof(reply) );
     CHECK_LEN( len, sizeof(reply) );
-    if (reply.handle == -1) return NULL;
+    if (reply.handle == -1) return 0;
 
     SYSTEM_LOCK();
     event = (EVENT *)K32OBJ_Create( K32OBJ_EVENT, sizeof(*event), name,
                                     reply.handle, EVENT_ALL_ACCESS, sa, &handle );
     if (event)
-    {
-        /* Finish initializing it */
-        event->wait_queue   = NULL;
-        event->manual_reset = manual_reset;
-        event->signaled     = initial_state;
         K32OBJ_DecCount( &event->header );
-    }
     SYSTEM_UNLOCK();
+    if (handle == INVALID_HANDLE_VALUE32) handle = 0;
     return handle;
 }
 
@@ -145,13 +88,29 @@
 {
     HANDLE32 handle = 0;
     K32OBJ *obj;
-    SYSTEM_LOCK();
-    if ((obj = K32OBJ_FindNameType( name, K32OBJ_EVENT )) != NULL)
+    struct open_named_obj_request req;
+    struct open_named_obj_reply reply;
+    int len = name ? strlen(name) + 1 : 0;
+
+    req.type    = OPEN_EVENT;
+    req.access  = access;
+    req.inherit = inherit;
+    CLIENT_SendRequest( REQ_OPEN_NAMED_OBJ, -1, 2, &req, sizeof(req), name, len );
+    CLIENT_WaitReply( &len, NULL, 1, &reply, sizeof(reply) );
+    CHECK_LEN( len, sizeof(reply) );
+    if (reply.handle != -1)
     {
-        handle = HANDLE_Alloc( PROCESS_Current(), obj, access, inherit, -1 );
-        K32OBJ_DecCount( obj );
+        SYSTEM_LOCK();
+        if ((obj = K32OBJ_FindNameType( name, K32OBJ_EVENT )) != NULL)
+        {
+            handle = HANDLE_Alloc( PROCESS_Current(), obj, access, inherit, reply.handle );
+            K32OBJ_DecCount( obj );
+            if (handle == INVALID_HANDLE_VALUE32)
+                handle = 0; /* must return 0 on failure, not -1 */
+        }
+        else CLIENT_CloseHandle( reply.handle );
+        SYSTEM_UNLOCK();
     }
-    SYSTEM_UNLOCK();
     return handle;
 }
 
@@ -169,33 +128,29 @@
 
 
 /***********************************************************************
+ *           EVENT_Operation
+ *
+ * Execute an event operation (set,reset,pulse).
+ */
+static BOOL32 EVENT_Operation( HANDLE32 handle, enum event_op op )
+{
+    struct event_op_request req;
+
+    req.handle = HANDLE_GetServerHandle( PROCESS_Current(), handle,
+                                         K32OBJ_EVENT, EVENT_MODIFY_STATE );
+    if (req.handle == -1) return FALSE;
+    req.op = op;
+    CLIENT_SendRequest( REQ_EVENT_OP, -1, 1, &req, sizeof(req) );
+    return !CLIENT_WaitReply( NULL, NULL, 0 );
+}
+
+
+/***********************************************************************
  *           PulseEvent    (KERNEL32.557)
  */
 BOOL32 WINAPI PulseEvent( HANDLE32 handle )
 {
-    struct event_op_request req;
-    EVENT *event;
-    SYSTEM_LOCK();
-    if (!(event = (EVENT *)HANDLE_GetObjPtr(PROCESS_Current(), handle,
-                                            K32OBJ_EVENT, EVENT_MODIFY_STATE,
-                                            &req.handle )))
-    {
-        SYSTEM_UNLOCK();
-        return FALSE;
-    }
-    if (req.handle != -1)
-    {
-        SYSTEM_UNLOCK();
-        req.op = PULSE_EVENT;
-        CLIENT_SendRequest( REQ_EVENT_OP, -1, 1, &req, sizeof(req) );
-        return !CLIENT_WaitReply( NULL, NULL, 0 );
-    }
-    event->signaled = TRUE;
-    SYNC_WakeUp( &event->wait_queue, event->manual_reset ? INFINITE32 : 1 );
-    event->signaled = FALSE;
-    K32OBJ_DecCount( &event->header );
-    SYSTEM_UNLOCK();
-    return TRUE;
+    return EVENT_Operation( handle, PULSE_EVENT );
 }
 
 
@@ -204,28 +159,7 @@
  */
 BOOL32 WINAPI SetEvent( HANDLE32 handle )
 {
-    struct event_op_request req;
-    EVENT *event;
-    SYSTEM_LOCK();
-    if (!(event = (EVENT *)HANDLE_GetObjPtr(PROCESS_Current(), handle,
-                                            K32OBJ_EVENT, EVENT_MODIFY_STATE,
-                                            &req.handle )))
-    {
-        SYSTEM_UNLOCK();
-        return FALSE;
-    }
-    if (req.handle != -1)
-    {
-        SYSTEM_UNLOCK();
-        req.op = SET_EVENT;
-        CLIENT_SendRequest( REQ_EVENT_OP, -1, 1, &req, sizeof(req) );
-        return !CLIENT_WaitReply( NULL, NULL, 0 );
-    }
-    event->signaled = TRUE;
-    SYNC_WakeUp( &event->wait_queue, event->manual_reset ? INFINITE32 : 1 );
-    K32OBJ_DecCount( &event->header );
-    SYSTEM_UNLOCK();
-    return TRUE;
+    return EVENT_Operation( handle, SET_EVENT );
 }
 
 
@@ -234,79 +168,7 @@
  */
 BOOL32 WINAPI ResetEvent( HANDLE32 handle )
 {
-    struct event_op_request req;
-    EVENT *event;
-    SYSTEM_LOCK();
-    if (!(event = (EVENT *)HANDLE_GetObjPtr(PROCESS_Current(), handle,
-                                            K32OBJ_EVENT, EVENT_MODIFY_STATE,
-                                            &req.handle )))
-    {
-        SYSTEM_UNLOCK();
-        return FALSE;
-    }
-    if (req.handle != -1)
-    {
-        SYSTEM_UNLOCK();
-        req.op = RESET_EVENT;
-        CLIENT_SendRequest( REQ_EVENT_OP, -1, 1, &req, sizeof(req) );
-        return !CLIENT_WaitReply( NULL, NULL, 0 );
-    }
-    event->signaled = FALSE;
-    K32OBJ_DecCount( &event->header );
-    SYSTEM_UNLOCK();
-    return TRUE;
-}
-
-
-/***********************************************************************
- *           EVENT_Signaled
- */
-static BOOL32 EVENT_Signaled( K32OBJ *obj, DWORD thread_id )
-{
-    EVENT *event = (EVENT *)obj;
-    assert( obj->type == K32OBJ_EVENT );
-    return event->signaled;
-}
-
-
-/***********************************************************************
- *           EVENT_Satisfied
- *
- * Wait on this object has been satisfied.
- */
-static BOOL32 EVENT_Satisfied( K32OBJ *obj, DWORD thread_id )
-{
-    EVENT *event = (EVENT *)obj;
-    assert( obj->type == K32OBJ_EVENT );
-    /* Reset if it's an auto-reset event */
-    if (!event->manual_reset) event->signaled = FALSE;
-    return FALSE;  /* Not abandoned */
-}
-
-
-/***********************************************************************
- *           EVENT_AddWait
- *
- * Add thread to object wait queue.
- */
-static void EVENT_AddWait( K32OBJ *obj, DWORD thread_id )
-{
-    EVENT *event = (EVENT *)obj;
-    assert( obj->type == K32OBJ_EVENT );
-    THREAD_AddQueue( &event->wait_queue, THREAD_ID_TO_THDB(thread_id) );
-}
-
-
-/***********************************************************************
- *           EVENT_RemoveWait
- *
- * Remove thread from object wait queue.
- */
-static void EVENT_RemoveWait( K32OBJ *obj, DWORD thread_id )
-{
-    EVENT *event = (EVENT *)obj;
-    assert( obj->type == K32OBJ_EVENT );
-    THREAD_RemoveQueue( &event->wait_queue, THREAD_ID_TO_THDB(thread_id) );
+    return EVENT_Operation( handle, RESET_EVENT );
 }
 
 
@@ -317,8 +179,6 @@
 {
     EVENT *event = (EVENT *)obj;
     assert( obj->type == K32OBJ_EVENT );
-    /* There cannot be any thread on the list since the ref count is 0 */
-    assert( event->wait_queue == NULL );
     obj->type = K32OBJ_UNKNOWN;
     HeapFree( SystemHeap, 0, event );
 }