Jacek Caban : ntdll: Introduce wait_async helper.
Alexandre Julliard
julliard at winehq.org
Thu May 23 16:04:39 CDT 2019
Module: wine
Branch: master
Commit: c09a903bfac4153b3061c0da95de58387a278cb7
URL: https://source.winehq.org/git/wine.git/?a=commit;h=c09a903bfac4153b3061c0da95de58387a278cb7
Author: Jacek Caban <jacek at codeweavers.com>
Date: Thu May 23 19:35:51 2019 +0200
ntdll: Introduce wait_async helper.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntdll/file.c | 33 ++++++++++-----------------------
1 file changed, 10 insertions(+), 23 deletions(-)
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index 3dafdcf..1f93c52 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -425,6 +425,12 @@ static async_data_t server_async( HANDLE handle, struct async_fileio *user, HAND
return async;
}
+static NTSTATUS wait_async( HANDLE handle, BOOL alertable, IO_STATUS_BLOCK *io )
+{
+ NtWaitForSingleObject( handle, alertable, NULL );
+ return io->u.Status;
+}
+
/* callback for irp async I/O completion */
static NTSTATUS irp_completion( void *user, IO_STATUS_BLOCK *io, NTSTATUS status )
{
@@ -588,12 +594,7 @@ static NTSTATUS server_read_file( HANDLE handle, HANDLE event, PIO_APC_ROUTINE a
if (status != STATUS_PENDING) RtlFreeHeap( GetProcessHeap(), 0, async );
- if (wait_handle)
- {
- NtWaitForSingleObject( wait_handle, (options & FILE_SYNCHRONOUS_IO_ALERT), NULL );
- status = io->u.Status;
- }
-
+ if (wait_handle) status = wait_async( wait_handle, (options & FILE_SYNCHRONOUS_IO_ALERT), io );
return status;
}
@@ -631,12 +632,7 @@ static NTSTATUS server_write_file( HANDLE handle, HANDLE event, PIO_APC_ROUTINE
if (status != STATUS_PENDING) RtlFreeHeap( GetProcessHeap(), 0, async );
- if (wait_handle)
- {
- NtWaitForSingleObject( wait_handle, (options & FILE_SYNCHRONOUS_IO_ALERT), NULL );
- status = io->u.Status;
- }
-
+ if (wait_handle) status = wait_async( wait_handle, (options & FILE_SYNCHRONOUS_IO_ALERT), io );
return status;
}
@@ -1550,12 +1546,7 @@ static NTSTATUS server_ioctl_file( HANDLE handle, HANDLE event,
if (status != STATUS_PENDING) RtlFreeHeap( GetProcessHeap(), 0, async );
- if (wait_handle)
- {
- NtWaitForSingleObject( wait_handle, (options & FILE_SYNCHRONOUS_IO_ALERT), NULL );
- status = io->u.Status;
- }
-
+ if (wait_handle) status = wait_async( wait_handle, (options & FILE_SYNCHRONOUS_IO_ALERT), io );
return status;
}
@@ -3350,11 +3341,7 @@ NTSTATUS WINAPI NtFlushBuffersFile( HANDLE hFile, IO_STATUS_BLOCK *io )
if (ret != STATUS_PENDING) RtlFreeHeap( GetProcessHeap(), 0, async );
- if (wait_handle)
- {
- NtWaitForSingleObject( wait_handle, FALSE, NULL );
- ret = io->u.Status;
- }
+ if (wait_handle) ret = wait_async( wait_handle, FALSE, io );
}
if (needs_close) close( fd );
More information about the wine-cvs
mailing list