From 826887a15be3e16a8912ec3863cc38edd0b6a9b3 Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Thu, 9 Feb 2023 01:40:13 +0700 Subject: [PATCH 2/3] core.c: patch close_nocancel --- src/libuv-1.44.2/src/unix/core.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/libuv-1.44.2/src/unix/core.c b/src/libuv-1.44.2/src/unix/core.c index 95d14271..d7e13d3d 100644 --- a/src/libuv-1.44.2/src/unix/core.c +++ b/src/libuv-1.44.2/src/unix/core.c @@ -553,18 +553,31 @@ int uv__accept(int sockfd) { * will unwind the thread when it's in the cancel state. Work around that * by making the system call directly. Musl libc is unaffected. */ + +#if defined(__GNUC__) +# define GCC_VERSION \ + (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) +#endif +#if defined(__clang__) || (defined(GCC_VERSION) && (GCC_VERSION >= 40500)) +/* gcc diagnostic pragmas available */ +# define GCC_DIAGNOSTIC_AVAILABLE +#endif int uv__close_nocancel(int fd) { -#if defined(__APPLE__) -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdollar-in-identifier-extension" -#if defined(__LP64__) || TARGET_OS_IPHONE +#if defined(__APPLE__) && (MAC_OS_X_VERSION_MAX_ALLOWED >= 1050) +# if defined(GCC_DIAGNOSTIC_AVAILABLE) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdollar-in-identifier-extension" +# endif +# if defined(__LP64__) || __LP64__ || (defined(TARGET_OS_IPHONE) && (TARGET_OS_IPHONE > 0)) extern int close$NOCANCEL(int); return close$NOCANCEL(fd); -#else +# else extern int close$NOCANCEL$UNIX2003(int); return close$NOCANCEL$UNIX2003(fd); -#endif -#pragma GCC diagnostic pop +# endif +# if defined(GCC_DIAGNOSTIC_AVAILABLE) +# pragma GCC diagnostic pop +# endif #elif defined(__linux__) && defined(__SANITIZE_THREAD__) && defined(__clang__) long rc; __sanitizer_syscall_pre_close(fd);