Ken Thomases : server: Make disconnecting a named pipe immediately close the client' s connection and allow the server to initiate a new connection.

Alexandre Julliard julliard at winehq.org
Sun Oct 23 13:24:14 CDT 2016


Module: wine
Branch: master
Commit: 780ede1cdeb17ac9136dc2ae0fea103884596dff
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=780ede1cdeb17ac9136dc2ae0fea103884596dff

Author: Ken Thomases <ken at codeweavers.com>
Date:   Thu Oct 20 14:31:50 2016 -0500

server: Make disconnecting a named pipe immediately close the client's connection and allow the server to initiate a new connection.

Signed-off-by: Ken Thomases <ken at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 server/named_pipe.c | 16 ++++------------
 1 file changed, 4 insertions(+), 12 deletions(-)

diff --git a/server/named_pipe.c b/server/named_pipe.c
index cfee4d5..b032901 100644
--- a/server/named_pipe.c
+++ b/server/named_pipe.c
@@ -60,7 +60,6 @@ enum pipe_state
     ps_wait_open,
     ps_connected_server,
     ps_wait_disconnect,
-    ps_disconnected_server,
     ps_wait_connect
 };
 
@@ -344,7 +343,6 @@ static void set_server_state( struct pipe_server *server, enum pipe_state state
         assert( !server->fd );
         set_no_fd_status( server->ioctl_fd, STATUS_PIPE_LISTENING );
         break;
-    case ps_disconnected_server:
     case ps_wait_connect:
         assert( !server->fd );
         set_no_fd_status( server->ioctl_fd, STATUS_PIPE_DISCONNECTED );
@@ -430,9 +428,6 @@ static void pipe_client_destroy( struct object *obj)
                do a successful flush without it. */
             set_server_state( server, ps_wait_disconnect );
             break;
-        case ps_disconnected_server:
-            set_server_state( server, ps_wait_connect );
-            break;
         case ps_idle_server:
         case ps_wait_open:
         case ps_wait_disconnect:
@@ -623,9 +618,6 @@ static obj_handle_t pipe_server_ioctl( struct fd *fd, ioctl_code_t code, const a
         case ps_connected_server:
             set_error( STATUS_PIPE_CONNECTED );
             break;
-        case ps_disconnected_server:
-            set_error( STATUS_PIPE_BUSY );
-            break;
         case ps_wait_disconnect:
             set_error( STATUS_NO_DATA_DETECTED );
             break;
@@ -644,10 +636,11 @@ static obj_handle_t pipe_server_ioctl( struct fd *fd, ioctl_code_t code, const a
 
             notify_empty( server );
 
-            /* dump the client and server fds, but keep the pointers
-               around - client loses all waiting data */
+            /* dump the client and server fds - client loses all waiting data */
             do_disconnect( server );
-            set_server_state( server, ps_disconnected_server );
+            server->client->server = NULL;
+            server->client = NULL;
+            set_server_state( server, ps_wait_connect );
             break;
         case ps_wait_disconnect:
             assert( !server->client );
@@ -658,7 +651,6 @@ static obj_handle_t pipe_server_ioctl( struct fd *fd, ioctl_code_t code, const a
         case ps_wait_open:
             set_error( STATUS_PIPE_LISTENING );
             break;
-        case ps_disconnected_server:
         case ps_wait_connect:
             set_error( STATUS_PIPE_DISCONNECTED );
             break;




More information about the wine-cvs mailing list