From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/ntdll/unix/file.c | 7 ++----- dlls/ntdll/unix/serial.c | 4 ++-- dlls/ntdll/unix/socket.c | 6 +++--- dlls/ntdll/unix/unix_private.h | 2 +- 4 files changed, 8 insertions(+), 11 deletions(-)
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c index 2ab04040258..cb3fa75597f 100644 --- a/dlls/ntdll/unix/file.c +++ b/dlls/ntdll/unix/file.c @@ -5484,7 +5484,7 @@ static void add_completion( HANDLE handle, ULONG_PTR value, NTSTATUS status, ULO }
/* notify direct completion of async and close the wait handle if it is no longer needed */ -void set_async_direct_result( HANDLE *async_handle, IO_STATUS_BLOCK *io, +void set_async_direct_result( HANDLE *async_handle, unsigned int options, IO_STATUS_BLOCK *io, NTSTATUS status, ULONG_PTR information, BOOL mark_pending ) { unsigned int ret; @@ -5493,10 +5493,7 @@ void set_async_direct_result( HANDLE *async_handle, IO_STATUS_BLOCK *io, assert( *async_handle );
if (!NT_ERROR(status) && status != STATUS_PENDING) - { - io->Status = status; - io->Information = information; - } + set_sync_iosb( io, status, information, options );
SERVER_START_REQ( set_async_direct_result ) { diff --git a/dlls/ntdll/unix/serial.c b/dlls/ntdll/unix/serial.c index 89b12980df7..c47adaf2054 100644 --- a/dlls/ntdll/unix/serial.c +++ b/dlls/ntdll/unix/serial.c @@ -1203,12 +1203,12 @@ static NTSTATUS wait_on( HANDLE handle, int fd, HANDLE event, PIO_APC_ROUTINE ap { status = STATUS_SUCCESS; *out_buffer = events; - set_async_direct_result( &wait_handle, io, STATUS_SUCCESS, sizeof(events), FALSE ); + set_async_direct_result( &wait_handle, options, io, STATUS_SUCCESS, sizeof(events), FALSE ); } else { status = STATUS_PENDING; - set_async_direct_result( &wait_handle, io, STATUS_PENDING, 0, TRUE ); + set_async_direct_result( &wait_handle, options, io, STATUS_PENDING, 0, TRUE ); } }
diff --git a/dlls/ntdll/unix/socket.c b/dlls/ntdll/unix/socket.c index 99b5a52326e..b54beb2287f 100644 --- a/dlls/ntdll/unix/socket.c +++ b/dlls/ntdll/unix/socket.c @@ -875,7 +875,7 @@ static NTSTATUS sock_recv( HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc, voi status = try_recv( fd, async, &information ); if (status == STATUS_DEVICE_NOT_READY && (force_async || !nonblocking)) status = STATUS_PENDING; - set_async_direct_result( &wait_handle, io, status, information, FALSE ); + set_async_direct_result( &wait_handle, options, io, status, information, FALSE ); }
if (status != STATUS_PENDING) @@ -1131,7 +1131,7 @@ static NTSTATUS sock_send( HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc, voi if (status == STATUS_DEVICE_NOT_READY && async->sent_len) status = STATUS_SUCCESS;
- set_async_direct_result( &wait_handle, io, status, async->sent_len, FALSE ); + set_async_direct_result( &wait_handle, options, io, status, async->sent_len, FALSE ); }
if (status != STATUS_PENDING) @@ -1387,7 +1387,7 @@ static NTSTATUS sock_transmit( HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc, status = STATUS_PENDING;
information = async->head_cursor + async->file_cursor + async->tail_cursor; - set_async_direct_result( &wait_handle, io, status, information, TRUE ); + set_async_direct_result( &wait_handle, options, io, status, information, TRUE ); }
if (status != STATUS_PENDING) diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h index 41c7ab4ff2c..6cd88a5acc0 100644 --- a/dlls/ntdll/unix/unix_private.h +++ b/dlls/ntdll/unix/unix_private.h @@ -356,7 +356,7 @@ extern void init_files(void); extern void init_cpu_info(void); extern void file_complete_async( HANDLE handle, unsigned int options, HANDLE event, PIO_APC_ROUTINE apc, void *apc_user, IO_STATUS_BLOCK *io, NTSTATUS status, ULONG_PTR information ); -extern void set_async_direct_result( HANDLE *async_handle, IO_STATUS_BLOCK *io, +extern void set_async_direct_result( HANDLE *async_handle, unsigned int options, IO_STATUS_BLOCK *io, NTSTATUS status, ULONG_PTR information, BOOL mark_pending );
extern NTSTATUS unixcall_wine_dbg_write( void *args );