[PATCH] server: Add new pipe servers to the end of the servers list.
Huw Davies
huw at codeweavers.com
Tue Feb 26 05:06:25 CST 2019
This ensures instances created first will be connected to first.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=41670
Signed-off-by: Huw Davies <huw at codeweavers.com>
---
dlls/kernel32/tests/pipe.c | 38 ++++++++++++++++++++++++++++++++++++++
server/named_pipe.c | 2 +-
2 files changed, 39 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/tests/pipe.c b/dlls/kernel32/tests/pipe.c
index 5bf27fac90..5dc6ace731 100644
--- a/dlls/kernel32/tests/pipe.c
+++ b/dlls/kernel32/tests/pipe.c
@@ -3671,6 +3671,43 @@ static void test_namedpipe_session_id(void)
CloseHandle(server);
}
+static void test_multiple_instances(void)
+{
+ HANDLE server[2], client;
+ int i;
+ BOOL ret;
+ OVERLAPPED ov;
+
+ for (i = 0; i < ARRAY_SIZE(server); i++)
+ {
+ server[i] = CreateNamedPipeA(PIPENAME, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
+ PIPE_READMODE_BYTE | PIPE_WAIT, 2, 1024, 1024,
+ NMPWAIT_USE_DEFAULT_WAIT, NULL);
+ ok(server[i] != INVALID_HANDLE_VALUE, "got invalid handle\n");
+ }
+
+ client = CreateFileA(PIPENAME, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);
+ ok(client != INVALID_HANDLE_VALUE, "got invalid handle\n");
+
+ /* Show that this has connected to server[0] not server[1] */
+
+ memset(&ov, 0, sizeof(ov));
+ ret = ConnectNamedPipe(server[1], &ov);
+ ok(ret == FALSE, "got %d\n", ret);
+ ok(GetLastError() == ERROR_IO_PENDING, "got %d\n", GetLastError());
+
+ memset(&ov, 0, sizeof(ov));
+ ret = ConnectNamedPipe(server[0], &ov);
+ ok(ret == FALSE, "got %d\n", ret);
+ ok(GetLastError() == ERROR_PIPE_CONNECTED, "got %d\n", GetLastError());
+
+ DisconnectNamedPipe(server[1]);
+ DisconnectNamedPipe(server[0]);
+ CloseHandle(client);
+ CloseHandle(server[1]);
+ CloseHandle(server[0]);
+}
+
START_TEST(pipe)
{
char **argv;
@@ -3736,4 +3773,5 @@ START_TEST(pipe)
test_TransactNamedPipe();
test_namedpipe_process_id();
test_namedpipe_session_id();
+ test_multiple_instances();
}
diff --git a/server/named_pipe.c b/server/named_pipe.c
index 101ff632b9..9e3303259f 100644
--- a/server/named_pipe.c
+++ b/server/named_pipe.c
@@ -1162,7 +1162,7 @@ static struct pipe_server *create_pipe_server( struct named_pipe *pipe, unsigned
server->pipe_end.server_pid = get_process_id( current->process );
init_async_queue( &server->listen_q );
- list_add_head( &pipe->servers, &server->entry );
+ list_add_tail( &pipe->servers, &server->entry );
if (!(server->pipe_end.fd = alloc_pseudo_fd( &pipe_server_fd_ops, &server->pipe_end.obj, options )))
{
release_object( server );
--
2.18.0
More information about the wine-devel
mailing list