win: open child stdio handles in overlapped-mode (#8113)

This will be used e.g. by the python client for native asyncio support
This commit is contained in:
Björn Linse
2018-04-25 10:11:08 +02:00
committed by Justin M. Keyes
parent a369385009
commit 009ccfe170
3 changed files with 50 additions and 1 deletions

View File

@@ -0,0 +1,33 @@
diff --git a/include/uv.h b/include/uv.h
index cdd251d8..79b7930e 100644
--- a/include/uv.h
+++ b/include/uv.h
@@ -865,7 +865,8 @@ typedef enum {
* flags may be specified to create a duplex data stream.
*/
UV_READABLE_PIPE = 0x10,
- UV_WRITABLE_PIPE = 0x20
+ UV_WRITABLE_PIPE = 0x20,
+ UV_OVERLAPPED_PIPE = 0x40
} uv_stdio_flags;
typedef struct uv_stdio_container_s {
diff --git a/src/win/process-stdio.c b/src/win/process-stdio.c
index 032e3093..b53bdea7 100644
--- a/src/win/process-stdio.c
+++ b/src/win/process-stdio.c
@@ -131,12 +131,13 @@ static int uv__create_stdio_pipe_pair(uv_loop_t* loop,
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
+ BOOL overlap = server_pipe->ipc || (flags & UV_OVERLAPPED_PIPE);
child_pipe = CreateFileA(pipe_name,
client_access,
0,
&sa,
OPEN_EXISTING,
- server_pipe->ipc ? FILE_FLAG_OVERLAPPED : 0,
+ overlap ? FILE_FLAG_OVERLAPPED : 0,
NULL);
if (child_pipe == INVALID_HANDLE_VALUE) {
err = GetLastError();