libuv: Avoid posix_spawn on macOS < 10.8
Since libuv commit `83efa3dd71` (Reland "macos: use posix_spawn instead
of fork", 2022-03-02, v1.44.0~10), `uv_spawn` on macOS < 10.8
has been observed to cause kernel panics and/or resource exhaustion.
This became particularly noticeable in CMake since commit 5420639a8d
(cmExecuteProcessCommand: Replace cmsysProcess with cmUVProcessChain,
2023-06-01, v3.28.0-rc1~138^2~8). Prefer `fork` over `posix_spawn` in
libuv when targeting macOS < 10.8.
Fixes: #25414
Fixes: #25818
Inspired-by: Ken Cunningham <kencu@macports.org>
This commit is contained in:
parent
b5602e7254
commit
e3e2ef1964
@ -37,7 +37,11 @@
|
||||
#include <sched.h>
|
||||
|
||||
#if defined(__APPLE__)
|
||||
# include <spawn.h>
|
||||
/* macOS 10.8 and later have a working posix_spawn */
|
||||
# if MAC_OS_X_VERSION_MIN_REQUIRED >= 1080
|
||||
# define UV_USE_APPLE_POSIX_SPAWN
|
||||
# include <spawn.h>
|
||||
# endif
|
||||
# include <paths.h>
|
||||
# include <sys/kauth.h>
|
||||
# include <sys/types.h>
|
||||
@ -430,7 +434,7 @@ static void uv__process_child_init(const uv_process_options_t* options,
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(__APPLE__)
|
||||
#if defined(UV_USE_APPLE_POSIX_SPAWN)
|
||||
typedef struct uv__posix_spawn_fncs_tag {
|
||||
struct {
|
||||
int (*addchdir_np)(const posix_spawn_file_actions_t *, const char *);
|
||||
@ -882,7 +886,7 @@ static int uv__spawn_and_init_child(
|
||||
int exec_errorno;
|
||||
ssize_t r;
|
||||
|
||||
#if defined(__APPLE__)
|
||||
#if defined(UV_USE_APPLE_POSIX_SPAWN)
|
||||
uv_once(&posix_spawn_init_once, uv__spawn_init_posix_spawn);
|
||||
|
||||
/* Special child process spawn case for macOS Big Sur (11.0) onwards
|
||||
|
Loading…
Reference in New Issue
Block a user