From ae5684479e4936a47036679f3b4badb63d4769b9 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Wed, 15 Mar 2017 23:25:42 +0100 Subject: [PATCH] server: Use no_fd_queue_async for named pipe ends in server I/O mode. Signed-off-by: Jacek Caban Signed-off-by: Alexandre Julliard --- server/named_pipe.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/server/named_pipe.c b/server/named_pipe.c index 0f6cf3d41a3..8113b18777f 100644 --- a/server/named_pipe.c +++ b/server/named_pipe.c @@ -143,6 +143,9 @@ static const struct object_ops named_pipe_ops = named_pipe_destroy /* destroy */ }; +/* common server and client pipe end functions */ +static void pipe_end_queue_async( struct fd *fd, struct async *async, int type, int count ); + /* server end functions */ static void pipe_server_dump( struct object *obj, int verbose ); static struct fd *pipe_server_get_fd( struct object *obj ); @@ -183,7 +186,7 @@ static const struct fd_ops pipe_server_fd_ops = no_fd_write, /* write */ pipe_server_flush, /* flush */ pipe_server_ioctl, /* ioctl */ - default_fd_queue_async, /* queue_async */ + pipe_end_queue_async, /* queue_async */ default_fd_reselect_async /* reselect_async */ }; @@ -226,7 +229,7 @@ static const struct fd_ops pipe_client_fd_ops = no_fd_write, /* write */ pipe_client_flush, /* flush */ default_fd_ioctl, /* ioctl */ - default_fd_queue_async, /* queue_async */ + pipe_end_queue_async, /* queue_async */ default_fd_reselect_async /* reselect_async */ }; @@ -611,6 +614,13 @@ static obj_handle_t pipe_client_flush( struct fd *fd, struct async *async, int b return 0; } +static void pipe_end_queue_async( struct fd *fd, struct async *async, int type, int count ) +{ + struct pipe_end *pipe_end = get_fd_user( fd ); + if (use_server_io( pipe_end )) no_fd_queue_async( fd, async, type, count ); + else default_fd_queue_async( fd, async, type, count ); +} + static inline int is_overlapped( unsigned int options ) { return !(options & (FILE_SYNCHRONOUS_IO_ALERT | FILE_SYNCHRONOUS_IO_NONALERT)); -- 2.11.4.GIT