ntdll: Remove no longer needed APC handling from APC_ASYNC_IO callbacks.

Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Jacek Caban 2017-04-10 13:41:29 +02:00 committed by Alexandre Julliard
parent fbf241034c
commit e2469b2c3d
3 changed files with 17 additions and 46 deletions

View File

@ -346,7 +346,7 @@ NTSTATUS WINAPI NtCreateFile( PHANDLE handle, ACCESS_MASK access, POBJECT_ATTRIB
* Asynchronous file I/O *
*/
typedef NTSTATUS async_callback_t( void *user, IO_STATUS_BLOCK *io, NTSTATUS status, void **apc, void **arg );
typedef NTSTATUS async_callback_t( void *user, IO_STATUS_BLOCK *io, NTSTATUS status );
struct async_fileio
{
@ -432,7 +432,7 @@ static async_data_t server_async( HANDLE handle, struct async_fileio *user, HAND
}
/* callback for irp async I/O completion */
static NTSTATUS irp_completion( void *user, IO_STATUS_BLOCK *io, NTSTATUS status, void **apc, void **arg )
static NTSTATUS irp_completion( void *user, IO_STATUS_BLOCK *io, NTSTATUS status )
{
struct async_irp *async = user;
ULONG information = 0;
@ -452,8 +452,6 @@ static NTSTATUS irp_completion( void *user, IO_STATUS_BLOCK *io, NTSTATUS status
{
io->u.Status = status;
io->Information = information;
*apc = async->io.apc;
*arg = async->io.apc_arg;
release_fileio( &async->io );
}
return status;
@ -511,8 +509,7 @@ NTSTATUS FILE_GetNtStatus(void)
/***********************************************************************
* FILE_AsyncReadService (INTERNAL)
*/
static NTSTATUS FILE_AsyncReadService( void *user, IO_STATUS_BLOCK *iosb,
NTSTATUS status, void **apc, void **arg )
static NTSTATUS FILE_AsyncReadService( void *user, IO_STATUS_BLOCK *iosb, NTSTATUS status )
{
struct async_fileio_read *fileio = user;
int fd, needs_close, result;
@ -558,8 +555,6 @@ static NTSTATUS FILE_AsyncReadService( void *user, IO_STATUS_BLOCK *iosb,
{
iosb->u.Status = status;
iosb->Information = fileio->already;
*apc = fileio->io.apc;
*arg = fileio->io.apc_arg;
release_fileio( &fileio->io );
}
return status;
@ -1118,8 +1113,7 @@ NTSTATUS WINAPI NtReadFileScatter( HANDLE file, HANDLE event, PIO_APC_ROUTINE ap
/***********************************************************************
* FILE_AsyncWriteService (INTERNAL)
*/
static NTSTATUS FILE_AsyncWriteService( void *user, IO_STATUS_BLOCK *iosb,
NTSTATUS status, void **apc, void **arg )
static NTSTATUS FILE_AsyncWriteService( void *user, IO_STATUS_BLOCK *iosb, NTSTATUS status )
{
struct async_fileio_write *fileio = user;
int result, fd, needs_close;
@ -1161,8 +1155,6 @@ static NTSTATUS FILE_AsyncWriteService( void *user, IO_STATUS_BLOCK *iosb,
{
iosb->u.Status = status;
iosb->Information = fileio->already;
*apc = fileio->io.apc;
*arg = fileio->io.apc_arg;
release_fileio( &fileio->io );
}
return status;
@ -1843,8 +1835,7 @@ struct read_changes_fileio
char data[1];
};
static NTSTATUS read_changes_apc( void *user, IO_STATUS_BLOCK *iosb,
NTSTATUS status, void **apc, void **arg )
static NTSTATUS read_changes_apc( void *user, IO_STATUS_BLOCK *iosb, NTSTATUS status )
{
struct read_changes_fileio *fileio = user;
int size = 0;
@ -1914,8 +1905,6 @@ static NTSTATUS read_changes_apc( void *user, IO_STATUS_BLOCK *iosb,
{
iosb->u.Status = status;
iosb->Information = size;
*apc = fileio->io.apc;
*arg = fileio->io.apc_arg;
release_fileio( &fileio->io );
}
return status;

View File

@ -404,11 +404,10 @@ static BOOL invoke_apc( const apc_call_t *call, apc_result_t *result )
}
case APC_ASYNC_IO:
{
void *apc = NULL, *arg = NULL;
IO_STATUS_BLOCK *iosb = wine_server_get_ptr( call->async_io.sb );
NTSTATUS (**user)(void *, IO_STATUS_BLOCK *, NTSTATUS, void **, void **) = wine_server_get_ptr( call->async_io.user );
NTSTATUS (**user)(void *, IO_STATUS_BLOCK *, NTSTATUS) = wine_server_get_ptr( call->async_io.user );
result->type = call->type;
result->async_io.status = (*user)( user, iosb, call->async_io.status, &apc, &arg );
result->async_io.status = (*user)( user, iosb, call->async_io.status );
if (result->async_io.status != STATUS_PENDING)
result->async_io.total = iosb->Information;
break;

View File

@ -470,7 +470,7 @@ static inline const char *debugstr_optval(const char *optval, int optlenval)
* Async IO declarations
****************************************************************/
typedef NTSTATUS async_callback_t( void *user, IO_STATUS_BLOCK *io, NTSTATUS status, void **apc, void **arg );
typedef NTSTATUS async_callback_t( void *user, IO_STATUS_BLOCK *io, NTSTATUS status );
struct ws2_async_io
{
@ -2399,8 +2399,7 @@ static int WS2_recv( int fd, struct ws2_async *wsa, int flags )
*
* Handler for overlapped recv() operations.
*/
static NTSTATUS WS2_async_recv( void *user, IO_STATUS_BLOCK *iosb,
NTSTATUS status, void **apc, void **arg )
static NTSTATUS WS2_async_recv( void *user, IO_STATUS_BLOCK *iosb, NTSTATUS status )
{
struct ws2_async *wsa = user;
int result = 0, fd;
@ -2437,12 +2436,7 @@ static NTSTATUS WS2_async_recv( void *user, IO_STATUS_BLOCK *iosb,
{
iosb->u.Status = status;
iosb->Information = result;
if (wsa->completion_func)
{
*apc = ws2_async_apc;
*arg = wsa;
}
else
if (!wsa->completion_func)
release_async_io( &wsa->io );
}
return status;
@ -2454,13 +2448,11 @@ static NTSTATUS WS2_async_recv( void *user, IO_STATUS_BLOCK *iosb,
* This function is used to finish the read part of an accept request. It is
* needed to place the completion on the correct socket (listener).
*/
static NTSTATUS WS2_async_accept_recv( void *user, IO_STATUS_BLOCK *iosb,
NTSTATUS status, void **apc, void **arg )
static NTSTATUS WS2_async_accept_recv( void *user, IO_STATUS_BLOCK *iosb, NTSTATUS status )
{
void *junk;
struct ws2_accept_async *wsa = user;
status = WS2_async_recv( wsa->read, iosb, status, &junk, &junk );
status = WS2_async_recv( wsa->read, iosb, status );
if (status == STATUS_PENDING)
return status;
@ -2476,8 +2468,7 @@ static NTSTATUS WS2_async_accept_recv( void *user, IO_STATUS_BLOCK *iosb,
*
* This is the function called to satisfy the AcceptEx callback
*/
static NTSTATUS WS2_async_accept( void *user, IO_STATUS_BLOCK *iosb,
NTSTATUS status, void **apc, void **arg )
static NTSTATUS WS2_async_accept( void *user, IO_STATUS_BLOCK *iosb, NTSTATUS status )
{
struct ws2_accept_async *wsa = user;
int len;
@ -2621,8 +2612,7 @@ static int WS2_send( int fd, struct ws2_async *wsa, int flags )
*
* Handler for overlapped send() operations.
*/
static NTSTATUS WS2_async_send( void *user, IO_STATUS_BLOCK *iosb,
NTSTATUS status, void **apc, void **arg )
static NTSTATUS WS2_async_send( void *user, IO_STATUS_BLOCK *iosb, NTSTATUS status )
{
struct ws2_async *wsa = user;
int result = 0, fd;
@ -2665,12 +2655,7 @@ static NTSTATUS WS2_async_send( void *user, IO_STATUS_BLOCK *iosb,
if (status != STATUS_PENDING)
{
iosb->u.Status = status;
if (wsa->completion_func)
{
*apc = ws2_async_apc;
*arg = wsa;
}
else
if (!wsa->completion_func)
release_async_io( &wsa->io );
}
return status;
@ -2681,8 +2666,7 @@ static NTSTATUS WS2_async_send( void *user, IO_STATUS_BLOCK *iosb,
*
* Handler for shutdown() operations on overlapped sockets.
*/
static NTSTATUS WS2_async_shutdown( void *user, IO_STATUS_BLOCK *iosb,
NTSTATUS status, void **apc, void **arg )
static NTSTATUS WS2_async_shutdown( void *user, IO_STATUS_BLOCK *iosb, NTSTATUS status )
{
struct ws2_async_shutdown *wsa = user;
int fd, err = 1;
@ -3040,8 +3024,7 @@ static NTSTATUS WS2_transmitfile_base( int fd, struct ws2_transmitfile_async *ws
*
* Asynchronous callback for overlapped TransmitFile operations.
*/
static NTSTATUS WS2_async_transmitfile( void *user, IO_STATUS_BLOCK *iosb,
NTSTATUS status, void **apc, void **arg )
static NTSTATUS WS2_async_transmitfile( void *user, IO_STATUS_BLOCK *iosb, NTSTATUS status )
{
struct ws2_transmitfile_async *wsa = user;
int fd;