From 26c5336494de2f85a87fb955a2caf46aa0718fd2 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Tue, 13 Jun 2017 16:46:41 +0200 Subject: [PATCH] server: Introduce create_server_async and use it in read request handler. Signed-off-by: Jacek Caban Signed-off-by: Alexandre Julliard --- server/async.c | 14 ++++++++++++++ server/fd.c | 14 ++++---------- server/file.h | 1 + 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/server/async.c b/server/async.c index f9d8af36b95..d1cea9a607e 100644 --- a/server/async.c +++ b/server/async.c @@ -272,6 +272,20 @@ struct async *create_async( struct thread *thread, const async_data_t *data, str return async; } +/* create an async associated with iosb for async-based requests */ +struct async *create_request_async( struct thread *thread, const async_data_t *data ) +{ + struct async *async; + struct iosb *iosb; + + if (!(iosb = create_iosb( get_req_data(), get_req_data_size(), get_reply_max_size() ))) + return NULL; + + async = create_async( current, data, iosb ); + release_object( iosb ); + return async; +} + /* set the timeout of an async operation */ void async_set_timeout( struct async *async, timeout_t timeout, unsigned int status ) { diff --git a/server/fd.c b/server/fd.c index 3c8f1bd6c30..f05556a1332 100644 --- a/server/fd.c +++ b/server/fd.c @@ -2446,20 +2446,14 @@ DECL_HANDLER(read) { struct fd *fd = get_handle_fd_obj( current->process, req->async.handle, FILE_READ_DATA ); struct async *async; - struct iosb *iosb; if (!fd) return; - if ((iosb = create_iosb( NULL, 0, get_reply_max_size() ))) + if ((async = create_request_async( current, &req->async ))) { - async = create_async( current, &req->async, iosb ); - if (async) - { - reply->wait = fd->fd_ops->read( fd, async, req->pos ); - reply->options = fd->options; - release_object( async ); - } - release_object( iosb ); + reply->wait = fd->fd_ops->read( fd, async, req->pos ); + reply->options = fd->options; + release_object( async ); } release_object( fd ); } diff --git a/server/file.h b/server/file.h index 5ea8f0f5cb7..30db87e3ac7 100644 --- a/server/file.h +++ b/server/file.h @@ -176,6 +176,7 @@ extern struct object *create_serial( struct fd *fd ); extern struct async_queue *create_async_queue( struct fd *fd ); extern void free_async_queue( struct async_queue *queue ); extern struct async *create_async( struct thread *thread, const async_data_t *data, struct iosb *iosb ); +extern struct async *create_request_async( struct thread *thread, const async_data_t *data ); extern void queue_async( struct async_queue *queue, struct async *async ); 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, apc_param_t total ); -- 2.11.4.GIT