Commit Graph

1650 Commits

Author SHA1 Message Date
Jameson Nash
f59cbd58da
io: make libuv more 64-bit safe (#5078)
Continuation of #5076, for the required breaking changes to make
write_queue_size also safe internally for I/O on 32-bit machines.
2026-03-19 21:09:06 -04:00
Jameson Nash
e1d6e62a4b
win: track each write_req in a queue instead of just a count (#5059)
Replace `write_reqs_pending` (unsigned int counter) in
`uv_stream_connection_fields` with `write_queue` (struct uv__queue),
mirroring the Unix stream implementation. Add `struct uv__queue queue`
to `UV_WRITE_PRIVATE_FIELDS` so each `uv_write_t` can be linked.

This enables iterating over in-flight write requests individually, which
is used in `uv__tcp_try_cancel_reqs` to replace the blanket `CancelIo`
call with per-request `CancelIoEx` calls (resolving the TODO comment
that anticipated this change).

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 17:36:41 -04:00
Jameson Nash
5ecd86c531
fs-poll: remove uv_fs_poll_t entirely (#5063)
Remove the uv_fs_poll_t handle and all associated implementation, tests,
and APIs. Users should migrate to managing uv_fs_stat calls themselves
with their own uv_timer. See #4543 for explanation.

Closes: #4543
Closes: #4942
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 13:04:58 -04:00
Jameson Nash
064617e40a
win: remove pipe shutdown logic, return ENOTSUP (#5067)
Named pipes do not actually support `shutdown`, and this hack to fake it
was unsound. Return `UV_ENOTSOCK` from `uv_shutdown` immediately for
`UV_NAMED_PIPE` handles, matching the behavior on unix where `shutdown`
on a pipe fd fails with `ENOTSOCK` (as oppposed to a unix domain socket
which is also a `uv_pipe_t`, but does supposed `shutdown`).

Fixes tests to work correctly whether or not shutdown works.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 13:04:03 -04:00
bryopsida
e5f79e487b
unix: support setting supplementary process groups (#4704)
uv_spawn currently unsets all supplementary groups if the caller sets
either a gid or uid to run the process under.  This commit adds support
for specifying the supplementary groups to set instead.

Co-authored-by: Ben Noordhuis <info@bnoordhuis.nl>
Co-authored-by: Joe Dollard <jdollard@gmail.com>
Signed-off-by: bryopsida <8363252+bryopsida@users.noreply.github.com>
2025-12-20 20:08:48 +01:00
Jameson Nash
612a8262b8 2025.01.15, Version 1.50.0 (Stable)
Changes since version 1.49.2:
 
 * ci: run macOS and iOS tests also on macOS 14 (Saúl Ibarra Corretgé)
 
 * unix,win: map ENOEXEC errno (Saúl Ibarra Corretgé)
 
 * test: skip multicast join test on ENOEXEC (Saúl Ibarra Corretgé)
 
 * ci: make sure the macOS firewall is disabled (Saúl Ibarra Corretgé)
 
 * darwin,test: squelch EBUSY error on multicast join (Saúl Ibarra Corretgé)
 
 * build: update minimum cmake to 3.10 (Ben Noordhuis)
 
 * kqueue: use EVFILT_USER for async if available (Jameson Nash)
 
 * unix,win: fix off-by-one in uv_wtf8_to_utf16() (Ben Noordhuis)
 
 * doc: add scala-native-loop to LINKS.md (Julian A Avar C)
 
 * unix: fix build breakage on haiku, openbsd, etc (Jeffrey H. Johnson)
 
 * kqueue: lower overhead in uv__io_check_fd (Andy Pan)
 
 * doc: move cjihrig back to active maintainers (cjihrig)
 
 * build(deps): bump actions/checkout from 3 to 4 (dependabot[bot])
 
 * unix,pipe: fix handling null buffer in uv_pipe_get{sock,peer}name (Saúl
   Ibarra Corretgé)
 
 * unix,win: harmonize buffer checking (Saúl Ibarra Corretgé)
 
 * unix,win: add support for detached threads (Juan José Arboleda)
 
 * src: add uv_thread_set/getname() methods (Santiago Gimeno)
 
 * build: fix qemu builds (Ben Noordhuis)
 
 * win: drop support for windows 8 (Ben Noordhuis)
 
 * linux: fix uv_cpu_info() arm cpu model detection (Ben Noordhuis)
 
 * linux: always use io_uring for epoll batching (Ben Noordhuis)
 
 * doc: clarify repeating timer behavior more (Ben Noordhuis)
 
 * unix,win: handle nbufs=0 in uv_udp_try_send (Ben Noordhuis)
 
 * win: use GetQueuedCompletionStatusEx directly (Saúl Ibarra Corretgé)
 
 * win: enable uv_thread_{get,set}name on MinGW (Saúl Ibarra Corretgé)
 
 * win: drop support for the legacy MinGW (Saúl Ibarra Corretgé)
 
 * win,fs: get (most) fstat when no permission (Jameson Nash)
 
 * win: plug uv_fs_event_start memory leak (amcgoogan)
 
 * test: address FreeBSD kernel bug causing NULL path in fsevents (Juan José
   Arboleda)
 
 * unix: refactor udp sendmsg code (Ben Noordhuis)
 
 * unix,win: add uv_udp_try_send2 (Ben Noordhuis)
 
 * test: fix flaky flaky udp_mmsg test (Juan José Arboleda)
 
 * build: enable fdsan in Android (Juan José Arboleda)
 
 * test: fix udp-multicast-join for FreeBSD (Juan José Arboleda)
 
 * win: fix leak processing fs event (Saúl Ibarra Corretgé)
 
 * src: set a default thread name for workers (Rafael Gonzaga)
 
 * misc: implement uv_getrusage_thread (Juan José Arboleda)
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEYS8OrZQBYiN530QC8ow8jaM8A74FAmeH+OkACgkQ8ow8jaM8
 A75yQBAAiYL5OQM5nxSoEzOn9gBi3ssuvJX6549gytYRLQKyhHCeS43i+YFVeWbw
 OjQa59M2BuYz11YoHW5Vu/1ohU06CCugvwJ9QKSvEfsDcmtBIAJp4RO5XaGTtnlB
 k7PqJj/BrX+MyH8JzeioxILHuitlemwBy8fqrguxIqlO8XnT6H2lFtqwJsD/OvTj
 O5a2kjdyK0773LraOsv18XJBWWQ8dfebxZgVvYY2Vi461CpZKgq85uKYrBpQLkqK
 oVY9VrDRNkDQZGJgJiC3FqtNudw0W15y3vuEVoYTkaKbQzoAqx7HP3GyQaGc0186
 afGediLfb1SkVscbwVQMDB7UvJjJaGd9DNQoa7PorjtAn/l+tsrZpCGFGqwRmGIC
 w8s7/pmlyKTtsMgKV3WUmTvB6XDgWt70OK4viCpbf2COdoRWjTvdMkAq1FEv/E7B
 QWlzyqItuJ1Z556mnKy0ifCG5V/eW8HlaMhJARAsQDVeKzquTMvrvJNm8iKVKpFh
 8Y1OR+0nGc3l7Id9x8drKNWfGif11LraJXHUJmrfj9OLLHaE613krvXwahyogxap
 yTmtWDOcVS9z37xAh/JAd7eX7Aj157OhXy4ax55q2+9akp+jfTyvDRTgQHtAcq0J
 k21+HSnUwFVzyR8Ux8Vz2O+w7WXNOeatOK5UPZ+wKxtZ1Q7ylog=
 =pGW8
 -----END PGP SIGNATURE-----

Merge tag 'v1.50.0' into merge_1.50.0
2025-02-26 19:13:27 +00:00
Juan José
be8eec8c5a
misc: implement uv_getrusage_thread (#4666)
Refs: https://github.com/libuv/libuv/issues/3119

Signed-off-by: Juan José Arboleda <soyjuanarbol@gmail.com>
Co-authored-by: James M Snell <jasnell@gmail.com>
2025-01-14 14:50:26 +01:00
Rafael Gonzaga
e59e2a9e49
src: set a default thread name for workers (#4664) 2025-01-08 13:58:28 +01:00
Juan José
beebf02cf6
test: fix udp-multicast-join for FreeBSD (#4655)
Fixes: https://github.com/libuv/libuv/issues/4651

Signed-off-by: Juan José Arboleda <soyjuanarbol@gmail.com>
2024-12-16 09:05:09 +01:00
Juan José Arboleda
a94f2ad2b7 build: enable fdsan in Android
This patch will update Android API in CI to 29 and will set up the fdsan
in the test runner.

Signed-off-by: Juan José Arboleda <soyjuanarbol@gmail.com>
Fixes: https://github.com/libuv/libuv/issues/4369
2024-12-16 09:01:15 +01:00
Juan José
3d78d121f4
test: fix flaky flaky udp_mmsg test (#4652)
Replace comparison of `alloc_cb_called` with the total bytes
read (`bytes_read`) to validate the test's correctness.

Fixes: https://github.com/libuv/libuv/issues/4650
Signed-off-by: Juan José Arboleda <soyjuanarbol@gmail.com>
2024-12-15 20:24:20 +01:00
Ben Noordhuis
e8969bff6c unix,win: add uv_udp_try_send2
Add a version of uv_udp_try_send that can send multiple datagrams.

Uses sendmmsg(2) on platforms that support it (Linux, FreeBSD, macOS),
falls back to a regular sendmsg(2) loop elsewhere.

This work was sponsored by ISC, the Internet Systems Consortium.
2024-12-13 21:52:59 +01:00
Juan José
acebb97490
test: address FreeBSD kernel bug causing NULL path in fsevents (#4649)
This commit documents a FreeBSD kernel issue where uv_fs_event can
receive a NULL filename and updates test-fs-event.c to skip filename
assertions on FreeBSD.

* Bugzilla: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=197695

Refs: https://github.com/libuv/libuv/issues/4606

Signed-off-by: Juan José Arboleda <soyjuanarbol@gmail.com>
2024-12-13 15:30:17 -05:00
Jameson Nash
72d9abccd7
win,fs: get (most) fstat when no permission (#4566)
Replaces: https://github.com/libuv/libuv/pull/4504
Fixes: https://github.com/libuv/libuv/issues/1980
Fixes: https://github.com/libuv/libuv/issues/3267

Co-authored-by: Hüseyin Açacak <huseyin@janeasystems.com>
2024-12-12 15:05:53 -05:00
Saúl Ibarra Corretgé
16e6e84dcc
win: drop support for the legacy MinGW (#4645)
The OG MinGW has been dead for years, MinGW-w64 has taken its place.
2024-12-12 15:59:30 +01:00
Saúl Ibarra Corretgé
7752218db2 fixup! 2024-12-12 15:55:16 +01:00
Ben Noordhuis
2494c088f0
unix,win: handle nbufs=0 in uv_udp_try_send (#4641) 2024-12-09 21:14:01 +01:00
Santiago Gimeno
61c966cf0b
src: add uv_thread_set/getname() methods (#4599)
`uv_thread_setname()` sets the name of the current thread. Different
platforms define different limits on the max number of characters
a thread name can be: Linux, IBMi (16), macOS (64), Windows (32767),
and NetBSD (32), etc. `uv_thread_setname()` will truncate it in case
`name` is larger than the limit of the platform.

`uv_thread_getname()` gets the name of the thread specified by `tid`.
The thread name is copied into the buffer pointed to by `name`. The
`size` parameter specifies the size of the buffer pointed to by `name`.
The buffer should be large enough to hold the name of the thread plus
the trailing NUL, or it will be truncated to fit.
2024-11-27 12:52:18 +01:00
Juan José
556a0f1f0f
unix,win: add support for detached threads (#4621)
This commit introduces the `uv_thread_detach` for thread detaching,
allowing threads to be detached state on both UNIX and Windows platforms.

Signed-off-by: Juan José Arboleda <soyjuanarbol@gmail.com>
2024-11-26 08:44:38 -05:00
Saúl Ibarra Corretgé
c6d43bea09
unix,win: harmonize buffer checking
For any API that takes a buffer and size pointer, check both pointers
and the pointed-to size and return UV_EINVAL in case of error.

Example:

```
int uv_foo(char* buffer, size_t* size) {
  if (buffer == NULL || size == NULL || *size == 0)
    return UV_EINVAL;
  ...
}
```

In order to "peek" the necessary size for dynamic allocation, the
following pattern can be used:

```
char *buf;
char scratch[1];
size_t len = sizeof(scratch);
int r;
r = uv_foo(scratch, &len);
assert(r == UV_ENOBUFS);
buf = malloc(len);
r = uv_foo(buf, &len);
...
```
2024-11-25 15:10:47 +01:00
Saúl Ibarra Corretgé
31ea3411cc unix,pipe: fix handling null buffer in uv_pipe_get{sock,peer}name
Fixes: https://github.com/libuv/libuv/issues/4610
2024-11-22 08:57:45 +01:00
dependabot[bot]
d05744e3ed
build(deps): bump actions/checkout from 3 to 4 (#4490)
Requires updating the android builder, since the arm emulator is
deprecated and unavailable now. Switch to using a Github Action plugin
instead of a container, so that hopefully future updates will be
delivered via that channel instead.

Changed the idna test since printf returns EILSEQ for some byte
sequences in the format on Android in glibc. We don't fully understand
the cause, but we can avoid that by not asking it to reencode the bytes
in the current locale settings.
2024-11-21 08:38:56 -05:00
Ben Noordhuis
c6b67af390
unix,win: fix off-by-one in uv_wtf8_to_utf16() (#4609)
uv_wtf8_length_as_utf16() checks if codepoints are > 0xFFFF (to see if
it should be encoded as a surrogate pair), therefore uv_wtf8_to_utf16()
should too. Instead it checked > 0x1000. Harmonize the checks.

Fixes: https://github.com/nodejs/node/issues/55914
2024-11-19 19:09:03 +01:00
Saúl Ibarra Corretgé
d4ab6fbba4 darwin,test: squelch EBUSY error on multicast join
The firewall was suspected to be the culprit, but the test
intermittently fails in the CI, not locally.
2024-10-22 10:26:32 +02:00
Saúl Ibarra Corretgé
a3abfbcb08 test: skip multicast join test on ENOEXEC
It happens due to the default firewall configuration on macOS >= 13.

Note: GH action runners have their firewall disabled, and yet, the test
fails all the same. Oh well...

Closes: https://github.com/libuv/libuv/issues/4263
2024-10-22 10:26:32 +02:00
Jameson Nash
7e6590f31d
win: remap ERROR_NOACCESS and ERROR_BUFFER_OVERFLOW (#4567)
It seemed incorrect to map a segfault to EACCES, since posix would typically
map this to EFAULT. The ERROR_BUFFER_OVERFLOW is literally "the filename is too
long", and is not typically an invalid parameter in posix.

Test originally added in #1060 to test the API, not the value.
2024-10-17 15:37:00 -04:00
Hüseyin Açacak
fbe2d85bd5 win,fs: remove trailing slash in junctions
Fixes: https://github.com/libuv/libuv/issues/3329
2024-10-15 09:48:27 +02:00
Hüseyin Açacak
1cbffcbd5d win,fs: fix bug in fs__readdir 2024-10-04 13:33:22 +02:00
Santiago Gimeno
88b874e63c
win,fs: uv_fs_rmdir() to return ENOENT on file (#4563)
After commit 18266a6969, it changed to return `ENOTDIR`, which makes it
consistent with other platforms but it also can be considered a breaking
change.
2024-10-03 21:29:10 +02:00
Edigleysson Silva (Edy)
5bb19f35ea
test: run android tests on ci (#4517) 2024-09-17 21:30:24 +02:00
Ben Noordhuis
9dddebab0d
test: delete test with invalid assumption (#4530)
Delete the fs_event_error_reporting test. It fails in different ways,
most frequently on the TSan sanitizer buildbot, due to running out of
file descriptors when that is not expected, or vice versa, *not*
running out of file descriptors when that *is* expected.

The test creates a large number of event loops and expects to,
eventually, hit EMFILE but it sometimes hits it too early, and
sometimes not at all.

I don't think TSan is really responsible here, it just makes the
invalid assumption in the test itself more visible.

Fixes: https://github.com/libuv/libuv/issues/4368
2024-09-12 22:19:10 +02:00
Andy Pan
44e61dab7e
kqueue: disallow ill-suited file descriptor kinds (#4513)
Follows up on https://github.com/libuv/libuv/pull/659.

Signed-off-by: Andy Pan <i@andypan.me>
2024-09-09 20:22:15 +02:00
Ben Noordhuis
1eac3310ad
linux: support abstract unix socket autobinding (#4499)
Autobinding is a feature that lets the kernel pick a name for the
abstract socket, instead of userspace having to provide one.

Two bugs that this change exposed are also fixed:

1. strlen(sa.sun_path) can read past the end if the file path is exactly
   sizeof(sa.sun_path) long (use memchr instead), and

2. don't return UV_ENOBUFS for abstract sockets when the buffer is
   exactly large enough to hold the result; per commit e5f4b79809,
   abstract socket names are not zero-terminated
2024-08-10 21:04:09 +02:00
Richard Lau
c84a2dbe03 test: check for UV_CHANGE or UV_RENAME event
All other checks for `UV_RENAME` in `test-fs-event` also allow
`UV_CHANGE`.
2024-08-08 12:03:25 +01:00
Richard Lau
88ab6e78da test: rmdir can return EEXIST or ENOTEMPTY
POSIX allows `rmdir` to return `EEXIST` or `ENOTEMPTY` for a non-empty
directory, so the test needs to allow both.
2024-08-08 12:03:25 +01:00
Matheus Izvekov
9b3b61f606
build: ubsan fixes (#4254)
MSVC does not actually support ubsan. There is a long-standing ticket
requesting this:
https://developercommunity.visualstudio.com/t/add-support-for-ubsan/840750

There are no known compilers that currently accept the
`/fsanitize=undefined` spelling. clang-cl accepts `-fsanitize...`,
same as regular clang.

Also passes no-sanitizer-recover so that tests actually fail.

Fix various ubsan-detected errors, including:

* win: fix req-inl.h ubsan failure

Don't use CONTAINING_RECORD macro from WinSDK, as it doesn't use the
right trick which avoids member access on null pointer.

Fixes:
```
src/win/req-inl.h:86:10: runtime error: member access within null pointer of type 'uv_req_t' (aka 'struct uv_req_s')
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior D:/a/libuv/libuv/src/win/req-inl.h:86:10
```

* test: fix ubsan failure on udp_ref3

Don't call functions through different function type.

Fixes:
```
src/win/udp.c:537:5: runtime error: call to function req_cb through pointer to incorrect function type 'void (*)(struct uv_udp_send_s *, int)'
test\test-ref.c:66: note: req_cb defined here
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior src/win/udp.c:537:5 in
```

* win: fix process-stdio.c ubsan failure

When accessing HANDLEs within the stdio buffer, use memcpy / memset in order to respect alignment.

Fixes:
```
src/win/process-stdio.c:197:5: runtime error: store to misaligned address 0x0230ee72d107 for type 'HANDLE' (aka 'void *'), which requires 8 byte alignment
0x0230ee72d107: note: pointer points here
  00 00 cd cd cd  cd cd cd cd cd cd cd cd  cd cd cd cd cd cd cd cd  cd cd cd cd cd cd cd fd  fd fd fd
              ^
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior src/win/process-stdio.c:197:5 in
```

* win: fix getaddrinfo.c ubsan failure

Reworks buffer alignment handling to respect requirements.

Fixes:
```
src/win/getaddrinfo.c:157:23: runtime error: member access within misaligned address 0x0290e4c6a17c for type 'struct addrinfo', which requires 8 byte alignment
0x0290e4c6a17c: note: pointer points here
  00 00 00 00 cd cd cd cd  cd cd cd cd cd cd cd cd  cd cd cd cd cd cd cd cd  cd cd cd cd cd cd cd cd
              ^
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior src/win/getaddrinfo.c:157:23 in
```

* win: fix pipe.c ubsan failure

Changes "random" representation from pointer to number.

Fixes:
```
src/win/pipe.c:234:11: runtime error: applying non-zero offset to non-null pointer 0xffffffffffffffff produced null pointer
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior src/win/pipe.c:234:11 in
```

* unix: fix stream.c ubsan failure

Avoids performing pointer arithmetic on null pointer.

Fixes:
```
src/unix/stream.c:701:15: runtime error: applying zero offset to null pointer
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /Users/runner/work/libuv/libuv/src/unix/stream.c:701:15 in
```
2024-08-05 17:15:53 -04:00
Abdirahim Musse
f23037fe21
test: pipe_overlong_path handle ENAMETOOLONG 2024-07-30 08:07:52 +02:00
Santiago Gimeno
badecdca14
fsevents: detect watched directory removal (#4376)
Which was broken both in `windows` and `macos`.
2024-07-30 00:59:38 +02:00
Hüseyin Açacak
83306585ff
win: fix env var in uv_os_homedir and uv_os_tmpdir (#4464)
If the corresponding environment variables are empty, the
uv_us_homedir() and uv_os_tmpdir() return garbage values. The reason
for this situation is the Windows API which doesn't return an error
even if the path is empty.

This PR fixes this problem by checking the return value of the API
call. If it is not an error and the length of the value is less than 3,
uv_us_homedir() and uv_os_tmpdir() will return UV_ENOENT.

Fixes: https://github.com/libuv/libuv/issues/2328
2024-07-29 17:50:11 -04:00
Ian Butterworth
18266a6969
win,fs: use posix delete semantics, if supported (#4318)
Implements posix delete for files and dirs, with fallback to the old
method if not supported (e.g. Fat32 or Win8).

Fixes: #3839
2024-07-29 17:38:26 -04:00
Ben Noordhuis
0c36b16d1b
test,openbsd: remove superfluous ifdef guard (#4461)
The test is skipped in its entirety on OpenBSD so there is no point in
compiling out code on said platform later on, it's not run anyway.
2024-07-29 16:45:31 -04:00
Ben Noordhuis
593aa3b2f6
test: handle zero-length udp datagram (#4344)
Under rare but benign circumstances (on XNU), incoming datagrams appear
to be dropped by the operating system after libuv has been notified of
their arrival but before libuv has had a chance to receive them.

Fixes: https://github.com/libuv/libuv/issues/4219
2024-07-29 16:30:08 -04:00
Andy Pan
ba24986f8d
unix: support SO_REUSEPORT with load balancing for UDP (#4419)
Signed-off-by: Andy Pan <i@andypan.me>
2024-06-20 17:17:17 +02:00
Andy Pan
1ee1063402
test: fix the flaky test-tcp-reuseport
Start connecting to the peers after all threads
to poll for accepting connections.

Ref: #4407
2024-05-30 09:53:44 +02:00
Andy Pan
d2d92b74a8
unix: support SO_REUSEPORT with load balancing for TCP 2024-05-21 13:36:49 +02:00
Andy Pan
287987b37c test: remove the obsolete HAVE_KQUEUE macro
---------

Signed-off-by: Andy Pan <i@andypan.me>
2024-05-21 09:40:07 +02:00
Juan José
bf61390769
linux,darwin: make uv_fs_copyfile behaves like cp -r (#4396)
This commit changes the timestamps in the file, the ownership and the
group.

Fixes: https://github.com/libuv/libuv/issues/3125

Signed-off-by: Juan José Arboleda <soyjuanarbol@gmail.com>
2024-05-08 11:30:30 +02:00
Ben Noordhuis
17219b8f39
test: use newer ASSERT_MEM_EQ macro (#4346)
Should hopefully make it easier to debug CI flakiness because
currently the test sometimes fails without a clear indication why.

Refs: https://github.com/libuv/libuv/issues/4106
2024-03-31 17:27:04 +02:00
Saúl Ibarra Corretgé
6adeeacee7
unix,win: error on zero delay tcp keepalive
Closes: https://github.com/libuv/libuv/pull/4350
Closes: https://github.com/libuv/libuv/issues/3487
2024-03-22 22:11:23 +01:00
Ben Noordhuis
3ecce91410
linux: don't delay EPOLL_CTL_DEL operations (#4328)
Perform EPOLL_CTL_DEL immediately instead of going through
io_uring's submit queue, otherwise the file descriptor may
be closed by the time the kernel starts the operation.

Fixes: https://github.com/libuv/libuv/issues/4323
2024-03-21 09:23:08 +01:00