Commit 0b4c9cb5 authored by Dmitry Timoshkov's avatar Dmitry Timoshkov Committed by Alexandre Julliard

server: Store full-sized completion information on the server side.

parent aa3a43f7
...@@ -1001,11 +1001,6 @@ static void test_iocp_setcompletion(HANDLE h) ...@@ -1001,11 +1001,6 @@ static void test_iocp_setcompletion(HANDLE h)
if (get_msg(h)) if (get_msg(h))
{ {
ok( completionKey == CKEY_FIRST, "Invalid completion key: %lx\n", completionKey ); 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( 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( 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 ); ok( completionValue == CVALUE_FIRST, "Invalid completion value: %lx\n", completionValue );
......
...@@ -4786,8 +4786,9 @@ struct add_completion_request ...@@ -4786,8 +4786,9 @@ struct add_completion_request
obj_handle_t handle; obj_handle_t handle;
apc_param_t ckey; apc_param_t ckey;
apc_param_t cvalue; apc_param_t cvalue;
unsigned int information; apc_param_t information;
unsigned int status; unsigned int status;
char __pad_44[4];
}; };
struct add_completion_reply struct add_completion_reply
{ {
...@@ -4806,8 +4807,9 @@ struct remove_completion_reply ...@@ -4806,8 +4807,9 @@ struct remove_completion_reply
struct reply_header __header; struct reply_header __header;
apc_param_t ckey; apc_param_t ckey;
apc_param_t cvalue; apc_param_t cvalue;
unsigned int information; apc_param_t information;
unsigned int status; unsigned int status;
char __pad_36[4];
}; };
...@@ -4846,8 +4848,9 @@ struct add_fd_completion_request ...@@ -4846,8 +4848,9 @@ struct add_fd_completion_request
struct request_header __header; struct request_header __header;
obj_handle_t handle; obj_handle_t handle;
apc_param_t cvalue; apc_param_t cvalue;
apc_param_t information;
unsigned int status; unsigned int status;
unsigned int information; char __pad_36[4];
}; };
struct add_fd_completion_reply struct add_fd_completion_reply
{ {
...@@ -5754,6 +5757,6 @@ union generic_reply ...@@ -5754,6 +5757,6 @@ union generic_reply
struct set_suspend_context_reply set_suspend_context_reply; struct set_suspend_context_reply set_suspend_context_reply;
}; };
#define SERVER_PROTOCOL_VERSION 441 #define SERVER_PROTOCOL_VERSION 442
#endif /* __WINE_WINE_SERVER_PROTOCOL_H */ #endif /* __WINE_WINE_SERVER_PROTOCOL_H */
...@@ -241,7 +241,7 @@ void async_set_timeout( struct async *async, timeout_t timeout, unsigned int sta ...@@ -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, 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) if (status == STATUS_MORE_PROCESSING_REQUIRED)
return; /* The async callback has successfully finished but no completion should be reported */ 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, ...@@ -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 */ /* 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; struct async *async = (struct async *)obj;
......
...@@ -82,7 +82,7 @@ struct comp_msg ...@@ -82,7 +82,7 @@ struct comp_msg
struct list queue_entry; struct list queue_entry;
apc_param_t ckey; apc_param_t ckey;
apc_param_t cvalue; apc_param_t cvalue;
unsigned int information; apc_param_t information;
unsigned int status; unsigned int status;
}; };
...@@ -152,7 +152,7 @@ struct completion *get_completion_obj( struct process *process, obj_handle_t han ...@@ -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, 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 ) ); struct comp_msg *msg = mem_alloc( sizeof( *msg ) );
......
...@@ -143,7 +143,7 @@ extern struct dir *get_dir_obj( struct process *process, obj_handle_t handle, un ...@@ -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 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, 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 */ /* serial port functions */
...@@ -157,7 +157,7 @@ extern struct async *create_async( struct thread *thread, struct async_queue *qu ...@@ -157,7 +157,7 @@ extern struct async *create_async( struct thread *thread, struct async_queue *qu
const async_data_t *data ); const async_data_t *data );
extern void async_set_timeout( struct async *async, timeout_t timeout, unsigned int status ); 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, 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_queued( struct async_queue *queue );
extern int async_waiting( struct async_queue *queue ); extern int async_waiting( struct async_queue *queue );
extern void async_terminate( struct async *async, unsigned int status ); extern void async_terminate( struct async *async, unsigned int status );
......
...@@ -3326,7 +3326,7 @@ enum coords_relative ...@@ -3326,7 +3326,7 @@ enum coords_relative
obj_handle_t handle; /* port handle */ obj_handle_t handle; /* port handle */
apc_param_t ckey; /* completion key */ apc_param_t ckey; /* completion key */
apc_param_t cvalue; /* completion value */ 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 */ unsigned int status; /* completion result */
@END @END
...@@ -3337,7 +3337,7 @@ enum coords_relative ...@@ -3337,7 +3337,7 @@ enum coords_relative
@REPLY @REPLY
apc_param_t ckey; /* completion key */ apc_param_t ckey; /* completion key */
apc_param_t cvalue; /* completion value */ 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 */ unsigned int status; /* completion result */
@END @END
...@@ -3362,8 +3362,8 @@ enum coords_relative ...@@ -3362,8 +3362,8 @@ enum coords_relative
@REQ(add_fd_completion) @REQ(add_fd_completion)
obj_handle_t handle; /* async' object */ obj_handle_t handle; /* async' object */
apc_param_t cvalue; /* completion value */ apc_param_t cvalue; /* completion value */
apc_param_t information; /* IO_STATUS_BLOCK Information */
unsigned int status; /* completion status */ unsigned int status; /* completion status */
unsigned int information; /* IO_STATUS_BLOCK Information */
@END @END
......
...@@ -2108,15 +2108,15 @@ C_ASSERT( FIELD_OFFSET(struct add_completion_request, handle) == 12 ); ...@@ -2108,15 +2108,15 @@ C_ASSERT( FIELD_OFFSET(struct add_completion_request, handle) == 12 );
C_ASSERT( FIELD_OFFSET(struct add_completion_request, ckey) == 16 ); C_ASSERT( FIELD_OFFSET(struct add_completion_request, ckey) == 16 );
C_ASSERT( FIELD_OFFSET(struct add_completion_request, cvalue) == 24 ); C_ASSERT( FIELD_OFFSET(struct add_completion_request, cvalue) == 24 );
C_ASSERT( FIELD_OFFSET(struct add_completion_request, information) == 32 ); C_ASSERT( FIELD_OFFSET(struct add_completion_request, information) == 32 );
C_ASSERT( FIELD_OFFSET(struct add_completion_request, status) == 36 ); C_ASSERT( FIELD_OFFSET(struct add_completion_request, status) == 40 );
C_ASSERT( sizeof(struct add_completion_request) == 40 ); C_ASSERT( sizeof(struct add_completion_request) == 48 );
C_ASSERT( FIELD_OFFSET(struct remove_completion_request, handle) == 12 ); C_ASSERT( FIELD_OFFSET(struct remove_completion_request, handle) == 12 );
C_ASSERT( sizeof(struct remove_completion_request) == 16 ); C_ASSERT( sizeof(struct remove_completion_request) == 16 );
C_ASSERT( FIELD_OFFSET(struct remove_completion_reply, ckey) == 8 ); C_ASSERT( FIELD_OFFSET(struct remove_completion_reply, ckey) == 8 );
C_ASSERT( FIELD_OFFSET(struct remove_completion_reply, cvalue) == 16 ); C_ASSERT( FIELD_OFFSET(struct remove_completion_reply, cvalue) == 16 );
C_ASSERT( FIELD_OFFSET(struct remove_completion_reply, information) == 24 ); C_ASSERT( FIELD_OFFSET(struct remove_completion_reply, information) == 24 );
C_ASSERT( FIELD_OFFSET(struct remove_completion_reply, status) == 28 ); C_ASSERT( FIELD_OFFSET(struct remove_completion_reply, status) == 32 );
C_ASSERT( sizeof(struct remove_completion_reply) == 32 ); C_ASSERT( sizeof(struct remove_completion_reply) == 40 );
C_ASSERT( FIELD_OFFSET(struct query_completion_request, handle) == 12 ); C_ASSERT( FIELD_OFFSET(struct query_completion_request, handle) == 12 );
C_ASSERT( sizeof(struct query_completion_request) == 16 ); C_ASSERT( sizeof(struct query_completion_request) == 16 );
C_ASSERT( FIELD_OFFSET(struct query_completion_reply, depth) == 8 ); C_ASSERT( FIELD_OFFSET(struct query_completion_reply, depth) == 8 );
...@@ -2127,9 +2127,9 @@ C_ASSERT( FIELD_OFFSET(struct set_completion_info_request, chandle) == 24 ); ...@@ -2127,9 +2127,9 @@ C_ASSERT( FIELD_OFFSET(struct set_completion_info_request, chandle) == 24 );
C_ASSERT( sizeof(struct set_completion_info_request) == 32 ); C_ASSERT( sizeof(struct set_completion_info_request) == 32 );
C_ASSERT( FIELD_OFFSET(struct add_fd_completion_request, handle) == 12 ); C_ASSERT( FIELD_OFFSET(struct add_fd_completion_request, handle) == 12 );
C_ASSERT( FIELD_OFFSET(struct add_fd_completion_request, cvalue) == 16 ); C_ASSERT( FIELD_OFFSET(struct add_fd_completion_request, cvalue) == 16 );
C_ASSERT( FIELD_OFFSET(struct add_fd_completion_request, status) == 24 ); C_ASSERT( FIELD_OFFSET(struct add_fd_completion_request, information) == 24 );
C_ASSERT( FIELD_OFFSET(struct add_fd_completion_request, information) == 28 ); C_ASSERT( FIELD_OFFSET(struct add_fd_completion_request, status) == 32 );
C_ASSERT( sizeof(struct add_fd_completion_request) == 32 ); C_ASSERT( sizeof(struct add_fd_completion_request) == 40 );
C_ASSERT( FIELD_OFFSET(struct get_window_layered_info_request, handle) == 12 ); C_ASSERT( FIELD_OFFSET(struct get_window_layered_info_request, handle) == 12 );
C_ASSERT( sizeof(struct get_window_layered_info_request) == 16 ); C_ASSERT( sizeof(struct get_window_layered_info_request) == 16 );
C_ASSERT( FIELD_OFFSET(struct get_window_layered_info_reply, color_key) == 8 ); C_ASSERT( FIELD_OFFSET(struct get_window_layered_info_reply, color_key) == 8 );
......
...@@ -3886,7 +3886,7 @@ static void dump_add_completion_request( const struct add_completion_request *re ...@@ -3886,7 +3886,7 @@ static void dump_add_completion_request( const struct add_completion_request *re
fprintf( stderr, " handle=%04x", req->handle ); fprintf( stderr, " handle=%04x", req->handle );
dump_uint64( ", ckey=", &req->ckey ); dump_uint64( ", ckey=", &req->ckey );
dump_uint64( ", cvalue=", &req->cvalue ); dump_uint64( ", cvalue=", &req->cvalue );
fprintf( stderr, ", information=%08x", req->information ); dump_uint64( ", information=", &req->information );
fprintf( stderr, ", status=%08x", req->status ); fprintf( stderr, ", status=%08x", req->status );
} }
...@@ -3899,7 +3899,7 @@ static void dump_remove_completion_reply( const struct remove_completion_reply * ...@@ -3899,7 +3899,7 @@ static void dump_remove_completion_reply( const struct remove_completion_reply *
{ {
dump_uint64( " ckey=", &req->ckey ); dump_uint64( " ckey=", &req->ckey );
dump_uint64( ", cvalue=", &req->cvalue ); dump_uint64( ", cvalue=", &req->cvalue );
fprintf( stderr, ", information=%08x", req->information ); dump_uint64( ", information=", &req->information );
fprintf( stderr, ", status=%08x", req->status ); fprintf( stderr, ", status=%08x", req->status );
} }
...@@ -3924,8 +3924,8 @@ static void dump_add_fd_completion_request( const struct add_fd_completion_reque ...@@ -3924,8 +3924,8 @@ static void dump_add_fd_completion_request( const struct add_fd_completion_reque
{ {
fprintf( stderr, " handle=%04x", req->handle ); fprintf( stderr, " handle=%04x", req->handle );
dump_uint64( ", cvalue=", &req->cvalue ); dump_uint64( ", cvalue=", &req->cvalue );
dump_uint64( ", information=", &req->information );
fprintf( stderr, ", status=%08x", req->status ); fprintf( stderr, ", status=%08x", req->status );
fprintf( stderr, ", information=%08x", req->information );
} }
static void dump_get_window_layered_info_request( const struct get_window_layered_info_request *req ) static void dump_get_window_layered_info_request( const struct get_window_layered_info_request *req )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment