server: Use no_fd_queue_async for named pipe ends in server I/O mode.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
a8023d300c
commit
ae5684479e
|
@ -143,6 +143,9 @@ static const struct object_ops named_pipe_ops =
|
||||||
named_pipe_destroy /* destroy */
|
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 */
|
/* server end functions */
|
||||||
static void pipe_server_dump( struct object *obj, int verbose );
|
static void pipe_server_dump( struct object *obj, int verbose );
|
||||||
static struct fd *pipe_server_get_fd( struct object *obj );
|
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 */
|
no_fd_write, /* write */
|
||||||
pipe_server_flush, /* flush */
|
pipe_server_flush, /* flush */
|
||||||
pipe_server_ioctl, /* ioctl */
|
pipe_server_ioctl, /* ioctl */
|
||||||
default_fd_queue_async, /* queue_async */
|
pipe_end_queue_async, /* queue_async */
|
||||||
default_fd_reselect_async /* reselect_async */
|
default_fd_reselect_async /* reselect_async */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -226,7 +229,7 @@ static const struct fd_ops pipe_client_fd_ops =
|
||||||
no_fd_write, /* write */
|
no_fd_write, /* write */
|
||||||
pipe_client_flush, /* flush */
|
pipe_client_flush, /* flush */
|
||||||
default_fd_ioctl, /* ioctl */
|
default_fd_ioctl, /* ioctl */
|
||||||
default_fd_queue_async, /* queue_async */
|
pipe_end_queue_async, /* queue_async */
|
||||||
default_fd_reselect_async /* reselect_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;
|
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 )
|
static inline int is_overlapped( unsigned int options )
|
||||||
{
|
{
|
||||||
return !(options & (FILE_SYNCHRONOUS_IO_ALERT | FILE_SYNCHRONOUS_IO_NONALERT));
|
return !(options & (FILE_SYNCHRONOUS_IO_ALERT | FILE_SYNCHRONOUS_IO_NONALERT));
|
||||||
|
|
Loading…
Reference in New Issue