Jacek Caban : server: Use separated async queue for listeners.

Alexandre Julliard julliard at winehq.org
Fri Aug 17 12:33:09 CDT 2018


Module: wine
Branch: master
Commit: 03317d10a0dfd21bf7b64120432274b98d8bfcb0
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=03317d10a0dfd21bf7b64120432274b98d8bfcb0

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Aug 17 17:41:01 2018 +0200

server: Use separated async queue for listeners.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 server/named_pipe.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/server/named_pipe.c b/server/named_pipe.c
index 80a56ae..c17889b 100644
--- a/server/named_pipe.c
+++ b/server/named_pipe.c
@@ -83,6 +83,7 @@ struct pipe_server
     struct list          entry;      /* entry in named pipe servers list */
     enum pipe_state      state;      /* server state */
     unsigned int         options;    /* pipe options */
+    struct async_queue   listen_q;   /* listen queue */
 };
 
 struct pipe_client
@@ -424,6 +425,7 @@ static void pipe_server_destroy( struct object *obj)
     if (!--pipe->instances) unlink_named_object( &pipe->obj );
     list_remove( &server->entry );
 
+    free_async_queue( &server->listen_q );
     pipe_end_disconnect( &server->pipe_end, STATUS_PIPE_BROKEN );
 
     pipe_end_destroy( &server->pipe_end );
@@ -1003,8 +1005,8 @@ static int pipe_server_ioctl( struct fd *fd, ioctl_code_t code, struct async *as
             return 0;
         }
 
-        fd_queue_async( server->pipe_end.fd, async, ASYNC_TYPE_WAIT );
         server->pipe_end.state = FILE_PIPE_LISTENING_STATE;
+        queue_async( &server->listen_q, async );
         set_server_state( server, ps_wait_open );
         async_wake_up( &server->pipe_end.pipe->waiters, STATUS_SUCCESS );
         set_error( STATUS_PENDING );
@@ -1088,6 +1090,7 @@ static struct pipe_server *create_pipe_server( struct named_pipe *pipe, unsigned
     }
     allow_fd_caching( server->pipe_end.fd );
     set_fd_signaled( server->pipe_end.fd, 1 );
+    init_async_queue( &server->listen_q );
     set_server_state( server, ps_idle_server );
     return server;
 }
@@ -1178,8 +1181,7 @@ static struct object *named_pipe_open_file( struct object *obj, unsigned int acc
 
     if ((client = create_pipe_client( options, pipe, pipe->outsize, options )))
     {
-        if (server->state == ps_wait_open)
-            fd_async_wake_up( server->pipe_end.fd, ASYNC_TYPE_WAIT, STATUS_SUCCESS );
+        async_wake_up( &server->listen_q, STATUS_SUCCESS );
         server->pipe_end.state = FILE_PIPE_CONNECTED_STATE;
         set_server_state( server, ps_connected_server );
         server->pipe_end.connection = &client->pipe_end;




More information about the wine-cvs mailing list