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