ensure file descriptors 0-2 are in use before using libuv

libuv expects file descriptors <= STDERR_FILENO are in use. otherwise,
it may abort when closing a file descriptor it opened.

See https://github.com/libuv/libuv/pull/4559

Closes #5226
This commit is contained in:
Thomas Abraham 2025-06-30 14:03:56 -04:00 committed by Ondřej Surý
parent bcca7a6834
commit 5cfdbeba72
No known key found for this signature in database
GPG key ID: 2820F37E873DEA41

View file

@ -130,6 +130,21 @@ isc__uv_free(void *ptr) {
void
isc__uv_initialize(void) {
/*
* Ensure the first 3 file descriptors are open
* otherwise, libuv may use one and trigger abort
* when closing it.
*
* See https://github.com/libuv/libuv/pull/4559
*/
do {
int fd = open("/dev/null", O_RDWR, 0);
RUNTIME_CHECK(fd >= 0);
if (fd > STDERR_FILENO) {
close(fd);
break;
}
} while (true);
#if UV_VERSION_HEX >= UV_VERSION(1, 38, 0)
int r;
isc_mem_create("uv", &isc__uv_mctx);