From c2667e7286f563361f6155b4cc1bb01a7d1d907f Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Tue, 13 Dec 2022 17:56:55 +0700 Subject: [PATCH 2/3] core.c: patch close_nocancel --- src/libuv/src/unix/core.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/libuv/src/unix/core.c b/src/libuv/src/unix/core.c index 6106090..524b945 100644 --- a/src/libuv/src/unix/core.c +++ b/src/libuv/src/unix/core.c @@ -531,18 +531,30 @@ 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); -- 2.37.3