Jacek Caban : server: Introduce create_server_async and use it in read request handler.
Alexandre Julliard
julliard at winehq.org
Tue Jun 20 15:34:55 CDT 2017
Module: wine
Branch: master
Commit: 26c5336494de2f85a87fb955a2caf46aa0718fd2
URL: http://source.winehq.org/git/wine.git/?a=commit;h=26c5336494de2f85a87fb955a2caf46aa0718fd2
Author: Jacek Caban <jacek at codeweavers.com>
Date: Tue Jun 13 16:46:41 2017 +0200
server: Introduce create_server_async and use it in read request handler.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
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 f9d8af3..d1cea9a 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 3c8f1bd..f05556a 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 5ea8f0f..30db87e 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 );
More information about the wine-cvs
mailing list