Alexandre Julliard : server:
Use the standard file descriptor wait queue for named pipe server async
waits .
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Apr 19 05:24:20 CDT 2007
Module: wine
Branch: master
Commit: c18e8d6a697c246a5776f44c8685bed22a881a22
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c18e8d6a697c246a5776f44c8685bed22a881a22
Author: Alexandre Julliard <julliard at winehq.org>
Date: Wed Apr 18 16:28:01 2007 +0200
server: Use the standard file descriptor wait queue for named pipe server async waits.
---
server/fd.c | 4 ++--
server/named_pipe.c | 8 ++------
2 files changed, 4 insertions(+), 8 deletions(-)
diff --git a/server/fd.c b/server/fd.c
index 6372f43..656042f 100644
--- a/server/fd.c
+++ b/server/fd.c
@@ -1738,12 +1738,12 @@ struct async *fd_queue_async( struct fd *fd, const async_data_t *data, int type,
assert(0);
}
- if ((async = create_async( current, queue, data )))
+ if ((async = create_async( current, queue, data )) && type != ASYNC_TYPE_WAIT)
{
if (!fd->inode)
set_fd_events( fd, fd->fd_ops->get_poll_events( fd ) );
else /* regular files are always ready for read and write */
- if (type != ASYNC_TYPE_WAIT) async_wake_up( queue, STATUS_ALERTED );
+ async_wake_up( queue, STATUS_ALERTED );
}
return async;
}
diff --git a/server/named_pipe.c b/server/named_pipe.c
index 9db5a58..4894576 100644
--- a/server/named_pipe.c
+++ b/server/named_pipe.c
@@ -76,7 +76,6 @@ struct pipe_server
struct named_pipe *pipe;
struct timeout_user *flush_poll;
struct event *event;
- struct async_queue *wait_q; /* only a single one can be queued */
unsigned int options; /* pipe options */
};
@@ -385,8 +384,6 @@ static void pipe_server_destroy( struct object *obj)
server->client = NULL;
}
- free_async_queue( server->wait_q );
-
assert( server->pipe->instances );
server->pipe->instances--;
@@ -587,7 +584,7 @@ static void pipe_server_ioctl( struct fd *fd, ioctl_code_t code, const async_dat
case ps_idle_server:
case ps_wait_connect:
set_server_state( server, ps_wait_open );
- if ((async = create_async( current, server->wait_q, async_data )))
+ if ((async = fd_queue_async( server->ioctl_fd, async_data, ASYNC_TYPE_WAIT, 0 )))
{
if (server->pipe->waiters) async_wake_up( server->pipe->waiters, STATUS_SUCCESS );
release_object( async );
@@ -709,7 +706,6 @@ static struct pipe_server *create_pipe_server( struct named_pipe *pipe, unsigned
server->client = NULL;
server->flush_poll = NULL;
server->options = options;
- server->wait_q = create_async_queue( NULL );
list_add_head( &pipe->servers, &server->entry );
grab_object( pipe );
@@ -791,7 +787,7 @@ static struct object *named_pipe_open_file( struct object *obj, unsigned int acc
if (client->fd && server->fd)
{
if (server->state == ps_wait_open)
- async_wake_up( server->wait_q, STATUS_SUCCESS );
+ fd_async_wake_up( server->ioctl_fd, ASYNC_TYPE_WAIT, STATUS_SUCCESS );
set_server_state( server, ps_connected_server );
server->client = client;
client->server = server;
More information about the wine-cvs
mailing list