Jacek Caban : server: Implement disconnecting message queue.

Alexandre Julliard julliard at winehq.org
Wed Mar 22 15:52:36 CDT 2017


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Mar 21 13:03:12 2017 +0100

server: Implement disconnecting message queue.

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

---

 server/named_pipe.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/server/named_pipe.c b/server/named_pipe.c
index 044bc97..6dc032d 100644
--- a/server/named_pipe.c
+++ b/server/named_pipe.c
@@ -401,6 +401,21 @@ static void pipe_end_disconnect( struct pipe_end *pipe_end, unsigned int status
 
     pipe_end->connection = NULL;
 
+    if (use_server_io( pipe_end ))
+    {
+        struct pipe_message *message, *next;
+        struct async *async;
+        if (pipe_end->fd) fd_async_wake_up( pipe_end->fd, ASYNC_TYPE_WAIT, status );
+        LIST_FOR_EACH_ENTRY_SAFE( message, next, &pipe_end->message_queue, struct pipe_message, entry )
+        {
+            async = message->async;
+            if (async || status == STATUS_PIPE_DISCONNECTED) free_message( message );
+            if (!async) continue;
+            async_terminate( async, status );
+            release_object( async );
+        }
+        if (status == STATUS_PIPE_DISCONNECTED) set_fd_signaled( pipe_end->fd, 0 );
+    }
     if (connection)
     {
         connection->connection = NULL;




More information about the wine-cvs mailing list