server: Store full sized completion information on the server side. Take 2.

Dmitry Timoshkov dmitry at baikal.ru
Fri Aug 23 05:37:51 CDT 2013


---
 dlls/ntdll/tests/file.c | 5 -----
 server/async.c          | 4 ++--
 server/completion.c     | 4 ++--
 server/file.h           | 4 ++--
 server/protocol.def     | 6 +++---
 5 files changed, 9 insertions(+), 14 deletions(-)

diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index e30ada0..744c3b2 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -1008,11 +1008,6 @@ static void test_iocp_setcompletion(HANDLE h)
     if (get_msg(h))
     {
         ok( completionKey == CKEY_FIRST, "Invalid completion key: %lx\n", completionKey );
-        /* FIXME: Remove once Wine is fixed */
-        if (sizeof(size) > 4)
-todo_wine
-        ok( ioSb.Information == size, "Invalid ioSb.Information: %lu\n", ioSb.Information );
-        else
         ok( ioSb.Information == size, "Invalid ioSb.Information: %lu\n", ioSb.Information );
         ok( U(ioSb).Status == STATUS_INVALID_DEVICE_REQUEST, "Invalid ioSb.Status: %x\n", U(ioSb).Status);
         ok( completionValue == CVALUE_FIRST, "Invalid completion value: %lx\n", completionValue );
diff --git a/server/async.c b/server/async.c
index ccddec7..017419d 100644
--- a/server/async.c
+++ b/server/async.c
@@ -241,7 +241,7 @@ void async_set_timeout( struct async *async, timeout_t timeout, unsigned int sta
 }
 
 static void add_async_completion( struct async_queue *queue, apc_param_t cvalue, unsigned int status,
-                                  unsigned int information )
+                                  apc_param_t information )
 {
     if (status == STATUS_MORE_PROCESSING_REQUIRED)
         return; /* The async callback has successfully finished but no completion should be reported */
@@ -262,7 +262,7 @@ static void add_async_completion( struct async_queue *queue, apc_param_t cvalue,
 }
 
 /* store the result of the client-side async callback */
-void async_set_result( struct object *obj, unsigned int status, unsigned int total, client_ptr_t apc )
+void async_set_result( struct object *obj, unsigned int status, apc_param_t total, client_ptr_t apc )
 {
     struct async *async = (struct async *)obj;
 
diff --git a/server/completion.c b/server/completion.c
index 948d7d1..cf891fe 100644
--- a/server/completion.c
+++ b/server/completion.c
@@ -82,7 +82,7 @@ struct comp_msg
     struct   list queue_entry;
     apc_param_t   ckey;
     apc_param_t   cvalue;
-    unsigned int  information;
+    apc_param_t   information;
     unsigned int  status;
 };
 
@@ -152,7 +152,7 @@ struct completion *get_completion_obj( struct process *process, obj_handle_t han
 }
 
 void add_completion( struct completion *completion, apc_param_t ckey, apc_param_t cvalue,
-                     unsigned int status, unsigned int information )
+                     unsigned int status, apc_param_t information )
 {
     struct comp_msg *msg = mem_alloc( sizeof( *msg ) );
 
diff --git a/server/file.h b/server/file.h
index ead356d..2a35979 100644
--- a/server/file.h
+++ b/server/file.h
@@ -143,7 +143,7 @@ extern struct dir *get_dir_obj( struct process *process, obj_handle_t handle, un
 
 extern struct completion *get_completion_obj( struct process *process, obj_handle_t handle, unsigned int access );
 extern void add_completion( struct completion *completion, apc_param_t ckey, apc_param_t cvalue,
-                            unsigned int status, unsigned int information );
+                            unsigned int status, apc_param_t information );
 
 /* serial port functions */
 
@@ -157,7 +157,7 @@ extern struct async *create_async( struct thread *thread, struct async_queue *qu
                                    const async_data_t *data );
 extern void async_set_timeout( struct async *async, timeout_t timeout, unsigned int status );
 extern void async_set_result( struct object *obj, unsigned int status,
-                              unsigned int total, client_ptr_t apc );
+                              apc_param_t total, client_ptr_t apc );
 extern int async_queued( struct async_queue *queue );
 extern int async_waiting( struct async_queue *queue );
 extern void async_terminate( struct async *async, unsigned int status );
diff --git a/server/protocol.def b/server/protocol.def
index 8fd592e..5da9938 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -3326,7 +3326,7 @@ enum coords_relative
     obj_handle_t  handle;         /* port handle */
     apc_param_t   ckey;           /* completion key */
     apc_param_t   cvalue;         /* completion value */
-    unsigned int  information;    /* IO_STATUS_BLOCK Information */
+    apc_param_t   information;    /* IO_STATUS_BLOCK Information */
     unsigned int  status;         /* completion result */
 @END
 
@@ -3337,7 +3337,7 @@ enum coords_relative
 @REPLY
     apc_param_t   ckey;           /* completion key */
     apc_param_t   cvalue;         /* completion value */
-    unsigned int  information;    /* IO_STATUS_BLOCK Information */
+    apc_param_t   information;    /* IO_STATUS_BLOCK Information */
     unsigned int  status;         /* completion result */
 @END
 
@@ -3362,8 +3362,8 @@ enum coords_relative
 @REQ(add_fd_completion)
     obj_handle_t   handle;        /* async' object */
     apc_param_t    cvalue;        /* completion value */
+    apc_param_t    information;   /* IO_STATUS_BLOCK Information */
     unsigned int   status;        /* completion status */
-    unsigned int   information;   /* IO_STATUS_BLOCK Information */
 @END
 
 
-- 
1.8.3.4




More information about the wine-patches mailing list