server: Explicitly specify when an ioctl call needs to be blocking.
diff --git a/server/named_pipe.c b/server/named_pipe.c
index e9cb14a..1651a67 100644
--- a/server/named_pipe.c
+++ b/server/named_pipe.c
@@ -140,7 +140,7 @@
 static void pipe_server_flush( struct fd *fd, struct event **event );
 static enum server_fd_type pipe_server_get_fd_type( struct fd *fd );
 static obj_handle_t pipe_server_ioctl( struct fd *fd, ioctl_code_t code, const async_data_t *async,
-                                       const void *data, data_size_t size );
+                                       int blocking, const void *data, data_size_t size );
 
 static const struct object_ops pipe_server_ops =
 {
@@ -223,7 +223,7 @@
 static void named_pipe_device_destroy( struct object *obj );
 static enum server_fd_type named_pipe_device_get_fd_type( struct fd *fd );
 static obj_handle_t named_pipe_device_ioctl( struct fd *fd, ioctl_code_t code, const async_data_t *async_data,
-                                             const void *data, data_size_t size );
+                                             int blocking, const void *data, data_size_t size );
 
 static const struct object_ops named_pipe_device_ops =
 {
@@ -592,7 +592,7 @@
 }
 
 static obj_handle_t pipe_server_ioctl( struct fd *fd, ioctl_code_t code, const async_data_t *async_data,
-                                       const void *data, data_size_t size )
+                                       int blocking, const void *data, data_size_t size )
 {
     struct pipe_server *server = get_fd_user( fd );
     struct async *async;
@@ -605,7 +605,7 @@
         {
         case ps_idle_server:
         case ps_wait_connect:
-            if (!async_data->event && !async_data->apc)
+            if (blocking)
             {
                 async_data_t new_data = *async_data;
                 if (!(wait_handle = alloc_wait_event( current->process ))) break;
@@ -673,7 +673,7 @@
         return 0;
 
     default:
-        return default_fd_ioctl( fd, code, async_data, data, size );
+        return default_fd_ioctl( fd, code, async_data, blocking, data, size );
     }
 }
 
@@ -854,7 +854,7 @@
 }
 
 static obj_handle_t named_pipe_device_ioctl( struct fd *fd, ioctl_code_t code, const async_data_t *async_data,
-                                             const void *data, data_size_t size )
+                                             int blocking, const void *data, data_size_t size )
 {
     struct named_pipe_device *device = get_fd_user( fd );
 
@@ -887,7 +887,7 @@
 
                 if (!pipe->waiters && !(pipe->waiters = create_async_queue( NULL ))) goto done;
 
-                if (!async_data->event && !async_data->apc)
+                if (blocking)
                 {
                     async_data_t new_data = *async_data;
                     if (!(wait_handle = alloc_wait_event( current->process ))) goto done;
@@ -916,7 +916,7 @@
         }
 
     default:
-        return default_fd_ioctl( fd, code, async_data, data, size );
+        return default_fd_ioctl( fd, code, async_data, blocking, data, size );
     }
 }