Commit 85cc2c13 authored by Andrey Turkin's avatar Andrey Turkin Committed by Alexandre Julliard

server: Connect named pipe synchronously when overlapped param is NULL.

parent c30688c4
...@@ -547,6 +547,13 @@ static DWORD CALLBACK serverThreadMain3(LPVOID arg) ...@@ -547,6 +547,13 @@ static DWORD CALLBACK serverThreadMain3(LPVOID arg)
oOverlap.hEvent = hEvent; oOverlap.hEvent = hEvent;
/* Wait for client to connect */ /* Wait for client to connect */
if (i == 0) {
trace("Server calling non-overlapped ConnectNamedPipe on overlapped pipe...\n");
success = ConnectNamedPipe(hnp, NULL);
err = GetLastError();
ok(success || (err == ERROR_PIPE_CONNECTED), "ConnectNamedPipe failed: %d\n", err);
trace("ConnectNamedPipe operation complete.\n");
} else {
trace("Server calling overlapped ConnectNamedPipe...\n"); trace("Server calling overlapped ConnectNamedPipe...\n");
success = ConnectNamedPipe(hnp, &oOverlap); success = ConnectNamedPipe(hnp, &oOverlap);
err = GetLastError(); err = GetLastError();
...@@ -569,6 +576,7 @@ static DWORD CALLBACK serverThreadMain3(LPVOID arg) ...@@ -569,6 +576,7 @@ static DWORD CALLBACK serverThreadMain3(LPVOID arg)
} }
ok(success || (err == ERROR_PIPE_CONNECTED), "GetOverlappedResult ConnectNamedPipe\n"); ok(success || (err == ERROR_PIPE_CONNECTED), "GetOverlappedResult ConnectNamedPipe\n");
trace("overlapped ConnectNamedPipe operation complete.\n"); trace("overlapped ConnectNamedPipe operation complete.\n");
}
/* Echo bytes once */ /* Echo bytes once */
memset(buf, 0, sizeof(buf)); memset(buf, 0, sizeof(buf));
......
...@@ -1227,7 +1227,7 @@ static NTSTATUS server_ioctl_file( HANDLE handle, HANDLE event, ...@@ -1227,7 +1227,7 @@ static NTSTATUS server_ioctl_file( HANDLE handle, HANDLE event,
SERVER_START_REQ( ioctl ) SERVER_START_REQ( ioctl )
{ {
req->code = code; req->code = code;
req->blocking = !apc && !event; req->blocking = !apc && !event && !cvalue;
req->async.handle = wine_server_obj_handle( handle ); req->async.handle = wine_server_obj_handle( handle );
req->async.callback = wine_server_client_ptr( ioctl_completion ); req->async.callback = wine_server_client_ptr( ioctl_completion );
req->async.iosb = wine_server_client_ptr( io ); req->async.iosb = wine_server_client_ptr( io );
......
...@@ -613,7 +613,7 @@ static obj_handle_t pipe_server_ioctl( struct fd *fd, ioctl_code_t code, const a ...@@ -613,7 +613,7 @@ static obj_handle_t pipe_server_ioctl( struct fd *fd, ioctl_code_t code, const a
{ {
case ps_idle_server: case ps_idle_server:
case ps_wait_connect: case ps_wait_connect:
if (blocking && !is_overlapped( get_fd_options(fd) )) if (blocking)
{ {
async_data_t new_data = *async_data; async_data_t new_data = *async_data;
if (!(wait_handle = alloc_wait_event( current->process ))) break; if (!(wait_handle = alloc_wait_event( current->process ))) break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment