From aec03b32d9329889e89ec5d08699eaa72a8ba89f Mon Sep 17 00:00:00 2001 From: Tomasz Poradowski Date: Mon, 23 Sep 2019 10:49:24 +0200 Subject: [PATCH] fixed pipe mapping for modules --- src/Win32_Interop/Win32_FDAPI.cpp | 16 ++++++++++++++-- src/Win32_Interop/Win32_FDAPI.h | 2 ++ src/aof.c | 2 +- src/module.c | 2 +- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/Win32_Interop/Win32_FDAPI.cpp b/src/Win32_Interop/Win32_FDAPI.cpp index ac53ed6a..a4096ff6 100644 --- a/src/Win32_Interop/Win32_FDAPI.cpp +++ b/src/Win32_Interop/Win32_FDAPI.cpp @@ -474,8 +474,20 @@ int FDAPI_pipe(int *pfds) { // Not passing _O_NOINHERIT, the underlying handles are inheritable by default result = crt_pipe(pfds, 8192, _O_BINARY); if (result == 0) { - //pfds[0] = RFDMap::getInstance().addCrtFD(pfds[0]); - //pfds[1] = RFDMap::getInstance().addCrtFD(pfds[1]); + pfds[0] = RFDMap::getInstance().addCrtFD(pfds[0]); + pfds[1] = RFDMap::getInstance().addCrtFD(pfds[1]); + } + } CATCH_AND_REPORT(); + + return result; +} + +int FDAPI_pipe_for_modules(int* pfds) { + int result = -1; + try { + // Not passing _O_NOINHERIT, the underlying handles are inheritable by default + result = crt_pipe(pfds, 8192, _O_BINARY); + if (result == 0) { //[tporadowski] when pipe is created for communication with modules - pretend it is a socket to // get proper SocketInfo instance created and added in RFDMap; it is later needed // when creating AE events in server.c/initServer() diff --git a/src/Win32_Interop/Win32_FDAPI.h b/src/Win32_Interop/Win32_FDAPI.h index 8fae9c75..d60a4599 100644 --- a/src/Win32_Interop/Win32_FDAPI.h +++ b/src/Win32_Interop/Win32_FDAPI.h @@ -220,6 +220,8 @@ extern int FDAPI_setmode(int fd, int mode); extern size_t FDAPI_fwrite(const void *buffer, size_t size, size_t count, FILE *file); extern int FDAPI_fileno(FILE *file); +int FDAPI_pipe_for_modules(int* pfds); + // Macroize CRT definitions to point to our own #ifndef FDAPI_NOCRTREDEFS #define close(fd) FDAPI_close(fd) diff --git a/src/aof.c b/src/aof.c index 11946ff9..80a7a4db 100644 --- a/src/aof.c +++ b/src/aof.c @@ -223,7 +223,7 @@ static void killAppendOnlyChild(void) { POSIX_ONLY(int statloc;) /* No AOFRW child? return. */ - if (server.aof_child_pid != -1)return; + if (server.aof_child_pid == -1)return; /* Kill AOFRW child, wait for child exit. */ diff --git a/src/module.c b/src/module.c index 65aa7c7f..a8945fa0 100644 --- a/src/module.c +++ b/src/module.c @@ -3902,7 +3902,7 @@ void moduleInitModulesSystem(void) { moduleKeyspaceSubscribersClient->flags |= CLIENT_MODULE; moduleRegisterCoreAPI(); - if (pipe(server.module_blocked_pipe) == -1) { + if (IF_WIN32(FDAPI_pipe_for_modules,pipe)(server.module_blocked_pipe) == -1) { serverLog(LL_WARNING, "Can't create the pipe for module blocking commands: %s", IF_WIN32(wsa_strerror(errno), strerror(errno)));