summaryrefslogtreecommitdiffstats
path: root/Utilities
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2024-03-31 14:43:05 (GMT)
committerBrad King <brad.king@kitware.com>2024-04-01 13:56:50 (GMT)
commitf54ec4e7f9a2d11306568668562246a154213b4f (patch)
tree84779c9e48a589baf1b82fc878edfaf9f489439e /Utilities
parentaf330faaf17f46196d2d2faca8a50e4146d5cc09 (diff)
downloadCMake-f54ec4e7f9a2d11306568668562246a154213b4f.zip
CMake-f54ec4e7f9a2d11306568668562246a154213b4f.tar.gz
CMake-f54ec4e7f9a2d11306568668562246a154213b4f.tar.bz2
libuv: macos: use posix poll instead of kqueue
Since commit 5420639a8d (cmExecuteProcessCommand: Replace cmsysProcess with cmUVProcessChain, 2023-06-01, v3.28.0-rc1~138^2~8) we've observed spurious process hangs in `uv__io_poll` waiting for `kqueue` to deliver events on macOS. Issue: #25839
Diffstat (limited to 'Utilities')
-rw-r--r--Utilities/cmlibuv/CMakeLists.txt4
-rw-r--r--Utilities/cmlibuv/include/uv/darwin.h5
-rw-r--r--Utilities/cmlibuv/src/unix/darwin.c2
3 files changed, 9 insertions, 2 deletions
diff --git a/Utilities/cmlibuv/CMakeLists.txt b/Utilities/cmlibuv/CMakeLists.txt
index a0b161b..29dd18e 100644
--- a/Utilities/cmlibuv/CMakeLists.txt
+++ b/Utilities/cmlibuv/CMakeLists.txt
@@ -191,8 +191,8 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
src/unix/bsd-ifaddrs.c
src/unix/darwin.c
src/unix/darwin-proctitle.c
- src/unix/fsevents.c
- src/unix/kqueue.c
+ src/unix/no-fsevents.c
+ src/unix/posix-poll.c
src/unix/proctitle.c
)
endif()
diff --git a/Utilities/cmlibuv/include/uv/darwin.h b/Utilities/cmlibuv/include/uv/darwin.h
index 36f872a..7eeb194 100644
--- a/Utilities/cmlibuv/include/uv/darwin.h
+++ b/Utilities/cmlibuv/include/uv/darwin.h
@@ -30,6 +30,9 @@
# define UV_PLATFORM_SEM_T semaphore_t
#endif
+#if 1 /* FIXME(#25839): use posix poll to avoid kqueue hangs on macOS. */
+# include "posix.h"
+#else
#define UV_HAVE_KQUEUE 1
#define UV_IO_PRIVATE_PLATFORM_FIELDS \
@@ -55,6 +58,8 @@
int cf_error; \
uv_mutex_t cf_mutex; \
+#endif
+
#define UV_STREAM_PRIVATE_PLATFORM_FIELDS \
void* select; \
diff --git a/Utilities/cmlibuv/src/unix/darwin.c b/Utilities/cmlibuv/src/unix/darwin.c
index 62f04d3..b9c8084 100644
--- a/Utilities/cmlibuv/src/unix/darwin.c
+++ b/Utilities/cmlibuv/src/unix/darwin.c
@@ -41,6 +41,7 @@ static mach_timebase_info_data_t timebase;
typedef unsigned char UInt8;
+#ifdef UV_HAVE_KQUEUE
int uv__platform_loop_init(uv_loop_t* loop) {
loop->cf_state = NULL;
@@ -54,6 +55,7 @@ int uv__platform_loop_init(uv_loop_t* loop) {
void uv__platform_loop_delete(uv_loop_t* loop) {
uv__fsevents_loop_delete(loop);
}
+#endif
static void uv__hrtime_init_once(void) {