and others added 2 commits
July 21, 2026 09:56Merged
talex5 added a commit to talex5/opam-repository that referenced this pull request
Jul 23, 2026CHANGES: Breaking changes: - Report errors from `Net.getaddrinfo` (@talex5 @haesbaert @avsm ocaml-multicore/eio#866 ocaml-multicore/eio#900). Before, `Net.getaddrinfo` returned `[]` on error. It now raises an exception with the actual error. New features: - Add `Eio.Net.Sockopt` for setting/getting socket options (@avsm @talex5 @anmonteiro ocaml-multicore/eio#858 ocaml-multicore/eio#575 ocaml-multicore/eio#859 ocaml-multicore/eio#874 ocaml-multicore/eio#876 ocaml-multicore/eio#889 ocaml-multicore/eio#891). This includes all the options from OCaml's `Unix` module, plus many more (e.g. `TCP_KEEPINTVL`). - Support `TCP_KEEPIDLE` socket option on macOS (@avsm @talex5 ocaml-multicore/eio#890). - Add `Path.chmod` (@patricoferris @webbunivAdmin @avsm @talex5 ocaml-multicore/eio#785 ocaml-multicore/eio#872). - Add `Path.chown` (@patricoferris @avsm @talex5 ocaml-multicore/eio#781 ocaml-multicore/eio#864 ocaml-multicore/eio#877). - Add `Path.with_dir_entries` for incremental directory reading (@patricoferris @talex5 @avsm ocaml-multicore/eio#821 ocaml-multicore/eio#897). This also provides the type of each entry, saving one `stat` per entry in most cases. - Add `Eio_unix.Pty` for pseudoterminal support (@avsm @talex5 @patricoferris @RyanGibb ocaml-multicore/eio#531). The `Pty` module can be used to create and configure pseudoterminals, `Eio_unix.Process.spawn_unix ?login_tty ...` allows connecting them up when spawning a child process. - Add `missing_ok` to `Eio.Path.unlink` (ocaml-multicore/eio#828) (@vog @patricoferris ocaml-multicore/eio#833). - Add `Flow.null` sink/source (@avsm @talex5 ocaml-multicore/eio#894, suggested by @jonsterling). This can be used as sink that consumes and discards all data written to it until end-of-file, and as a source that immediately returns end-of-file. - Add `Eio_unix.Process.spawn_unix ?uid ?gid ?pgid` options (@patricoferris @talex5 ocaml-multicore/eio#802 ocaml-multicore/eio#803). Allows setting the user ID, group ID and process group of the child. - Add `Eio_unix.Stdenv.override` for updating environments (@patricoferris @talex5 ocaml-multicore/eio#823). - Add `Eio_unix.Err` module (@talex5 ocaml-multicore/eio#887). This is convenient whenever wrapping a function that raises `Unix_error`. Linux backend: - eio_linux now requires Linux 5.18 or later. On older kernels, `Eio_main.run` will use eio_posix instead. - Add `Low_level.{socket,bind,listen}` with uring support (@avsm @talex5 ocaml-multicore/eio#884). - Add `ftruncate`/`fdatasync` and use uring for `fsync`/`shutdown` (@avsm @talex5 ocaml-multicore/eio#850). - Switch `fstat` to `statx` on linux and fetch `blksize` (@avsm @talex5 ocaml-multicore/eio#865). - uring: update min to 2.15.0+ so we can use new functionality (@avsm ocaml-multicore/eio#867). - Add `Eio_linux.Low_level.Fixed` (@talex5 ocaml-multicore/eio#848). This replaces the `Uring.Region` API. - eio_linux: use `IORING_SETUP_SINGLE_ISSUER` (@talex5 ocaml-multicore/eio#841). This hints to uring to do some locking optimisations assuming that each ring is only written by one thread. - eio_linux: use `IORING_SETUP_DEFER_TASKRUN` for performance (@talex5 ocaml-multicore/eio#842). Bug fixes: - Allow `Eio.Path.load` to handle files with zero size (@patricoferris @talex5 ocaml-multicore/eio#869 ocaml-multicore/eio#878, reported by @copy and @vog). This is useful for loading files in `/proc/` on Linux. - `Eio.Process`: match Unix search behaviour (@talex5 ocaml-multicore/eio#820). Don't search `$PATH` if the name contains a `/`. - eio_posix: on macOS, fall back to `select()` for FDs where `poll()` fails (@avsm @talex5 ocaml-multicore/eio#893, reported by @aaronjeline). macOS `poll()` returns `POLLNVAL` for some device FDs such as `/dev/tty` or `/dev/null`. - eio_posix: wait for a writer when first reading from a FIFO (@talex5 ocaml-multicore/eio#857). Before, it would return end-of-file if there was no waiter. - eio_posix: open confined paths in non-blocking mode too (@talex5 ocaml-multicore/eio#855). Previously, paths opened using `fs` were opened in non-blocking mode, but paths opened with `cwd` were not. This probably only affects FIFOs. - eio_posix: use `MSG_CMSG_CLOEXEC` when receiving file descriptors (@talex5 @avsm ocaml-multicore/eio#843). - eio_linux: `read_upto` and `write_single` didn't hold the FD open (@avsm ocaml-multicore/eio#871). This could be a problem if another fiber closed the FD before the operation was submitted. - eio_linux: handle ENOMEM from `io_uring_queue_init` (@talex5 ocaml-multicore/eio#852). We would already fall back to eio_posix if there wasn't enough lockable memory to add a fixed buffer, but didn't cope with not having enough memory for the ring itself. - fork_action: retry on `EINTR` when writing to pipe (@avsm ocaml-multicore/eio#870). - eio_windows: fix removing of FDs from read/write sets (@z-rui @talex5 ocaml-multicore/eio#861). Could cause high CPU use in some cases. - eio_windows: remove unused `unix_cstruct.ml` file (@talex5 ocaml-multicore/eio#817, reported by @dijkstracula). Caused an error if linking with `-linkall`. Minor changes: - Propagate `errno` back from `fork_actions` into `Eio.Process` (@Innf107 @avsm @talex5 ocaml-multicore/eio#854). Report Unix `fork_action` failures as Eio exceptions instead of `Failure`. This allows matching on specific errors (e.g. `Argument_list_too_long`). - Alias `Path.open_dir` to `open_subtree` (@talex5 @avsm ocaml-multicore/eio#853). This more accurately describes what it's for. - Prioritize returning `Fiber.any` value over cancelling quickly (@adamchol @talex5 ocaml-multicore/eio#806). This works better with the new `combine` option. - Relax return types of `Eio.Process.Pipe` (@Arogbonlo @patricoferris @talex5 ocaml-multicore/eio#775, requested by @rizo). - `Eio.Pool.use`: move `never_block` argument (@talex5 ocaml-multicore/eio#747). - eta expand some function applications to support OxCaml (@avsm ocaml-multicore/eio#898). - fork_action: reject ids that don't fit uid_t/gid_t/pid_t (@avsm ocaml-multicore/eio#895). Documentation: - eio_unix: minor typo in `Unix_error` docstring (@avsm ocaml-multicore/eio#888). - Simplify custom "env" type in example (@vog ocaml-multicore/eio#832). - Fix docs for `without_binding` (@patricoferris ocaml-multicore/eio#822). - Clarify Eio as a possible concurrency library (@patricoferris ocaml-multicore/eio#879). Code cleanups: - Add braces around switch case block (@olafhering ocaml-multicore/eio#882). - eio_linux: use `Uring.Res` module for safer error handling (@talex5 @avsm ocaml-multicore/eio#868). - eio_linux: move read/write retries out of scheduler (@talex5 @avsm ocaml-multicore/eio#849). - eio_linux: split out `net.ml`, `process.ml`, `fs.ml` and `time.ml` (@talex5 ocaml-multicore/eio#886). This more closely matches the layout in eio_posix. - eio_linux: remove unused code (@talex5 ocaml-multicore/eio#851). uring should never ask us to retry a job. - Remove all use of `[@@@Alert "-unstable"]` (@talex5 ocaml-multicore/eio#885). This was needed a long time ago to work around a bug in Merlin. - Remove some test files after running the tests (@avsm ocaml-multicore/eio#883). - win32: declare unixsupport functions as `CAMLextern` (@avsm @dra27 ocaml-multicore/eio#881). This is necessary under Windows to prevent flexdll errors. - Remove unused `show_backend_exceptions` flag (@talex5 ocaml-multicore/eio#880). - Improve formatting of IP addresses in tests (@talex5 ocaml-multicore/eio#847). - Add lintcstubs-arity as a test dependency (@talex5 ocaml-multicore/eio#846). - Update Dockerfiles to recent versions (@talex5 ocaml-multicore/eio#844). - Skip `test_alloc_fixed_or_wait` if no fixed buffers are available (@talex5 ocaml-multicore/eio#815). Prevents spurious CI failures. - Make `eio_unix_fork_error` call `_exit` automatically (@talex5 ocaml-multicore/eio#896).
talex5 added a commit to talex5/opam-repository that referenced this pull request
Jul 24, 2026CHANGES: Breaking changes: - Report errors from `Net.getaddrinfo` (@talex5 @haesbaert @avsm ocaml-multicore/eio#866 ocaml-multicore/eio#900). Before, `Net.getaddrinfo` returned `[]` on error. It now raises an exception with the actual error. New features: - Add `Eio.Net.Sockopt` for setting/getting socket options (@avsm @talex5 @anmonteiro ocaml-multicore/eio#858 ocaml-multicore/eio#575 ocaml-multicore/eio#859 ocaml-multicore/eio#874 ocaml-multicore/eio#876 ocaml-multicore/eio#889 ocaml-multicore/eio#891). This includes all the options from OCaml's `Unix` module, plus many more (e.g. `TCP_KEEPINTVL`). - Support `TCP_KEEPIDLE` socket option on macOS (@avsm @talex5 ocaml-multicore/eio#890). - Add `Path.chmod` (@patricoferris @webbunivAdmin @avsm @talex5 ocaml-multicore/eio#785 ocaml-multicore/eio#872). - Add `Path.chown` (@patricoferris @avsm @talex5 ocaml-multicore/eio#781 ocaml-multicore/eio#864 ocaml-multicore/eio#877). - Add `Path.with_dir_entries` for incremental directory reading (@patricoferris @talex5 @avsm ocaml-multicore/eio#821 ocaml-multicore/eio#897). This also provides the type of each entry, saving one `stat` per entry in most cases. - Add `Eio_unix.Pty` for pseudoterminal support (@avsm @talex5 @patricoferris @RyanGibb ocaml-multicore/eio#531). The `Pty` module can be used to create and configure pseudoterminals, `Eio_unix.Process.spawn_unix ?login_tty ...` allows connecting them up when spawning a child process. - Add `missing_ok` to `Eio.Path.unlink` (ocaml-multicore/eio#828) (@vog @patricoferris ocaml-multicore/eio#833). - Add `Flow.null` sink/source (@avsm @talex5 ocaml-multicore/eio#894, suggested by @jonsterling). This can be used as sink that consumes and discards all data written to it until end-of-file, and as a source that immediately returns end-of-file. - Add `Eio_unix.Process.spawn_unix ?uid ?gid ?pgid` options (@patricoferris @talex5 ocaml-multicore/eio#802 ocaml-multicore/eio#803). Allows setting the user ID, group ID and process group of the child. - Add `Eio_unix.Stdenv.override` for updating environments (@patricoferris @talex5 ocaml-multicore/eio#823). - Add `Eio_unix.Err` module (@talex5 ocaml-multicore/eio#887). This is convenient whenever wrapping a function that raises `Unix_error`. Linux backend: - eio_linux now requires Linux 5.18 or later. On older kernels, `Eio_main.run` will use eio_posix instead. - Add `Low_level.{socket,bind,listen}` with uring support (@avsm @talex5 ocaml-multicore/eio#884). - Add `ftruncate`/`fdatasync` and use uring for `fsync`/`shutdown` (@avsm @talex5 ocaml-multicore/eio#850). - Switch `fstat` to `statx` on linux and fetch `blksize` (@avsm @talex5 ocaml-multicore/eio#865). - uring: update min to 2.15.0+ so we can use new functionality (@avsm ocaml-multicore/eio#867). - Add `Eio_linux.Low_level.Fixed` (@talex5 ocaml-multicore/eio#848). This replaces the `Uring.Region` API. - eio_linux: use `IORING_SETUP_SINGLE_ISSUER` (@talex5 ocaml-multicore/eio#841). This hints to uring to do some locking optimisations assuming that each ring is only written by one thread. - eio_linux: use `IORING_SETUP_DEFER_TASKRUN` for performance (@talex5 ocaml-multicore/eio#842). Bug fixes: - Allow `Eio.Path.load` to handle files with zero size (@patricoferris @talex5 ocaml-multicore/eio#869 ocaml-multicore/eio#878, reported by @copy and @vog). This is useful for loading files in `/proc/` on Linux. - `Eio.Process`: match Unix search behaviour (@talex5 ocaml-multicore/eio#820). Don't search `$PATH` if the name contains a `/`. - eio_posix: on macOS, fall back to `select()` for FDs where `poll()` fails (@avsm @talex5 ocaml-multicore/eio#893, reported by @aaronjeline). macOS `poll()` returns `POLLNVAL` for some device FDs such as `/dev/tty` or `/dev/null`. - eio_posix: wait for a writer when first reading from a FIFO (@talex5 ocaml-multicore/eio#857). Before, it would return end-of-file if there was no waiter. - eio_posix: open confined paths in non-blocking mode too (@talex5 ocaml-multicore/eio#855). Previously, paths opened using `fs` were opened in non-blocking mode, but paths opened with `cwd` were not. This probably only affects FIFOs. - eio_posix: use `MSG_CMSG_CLOEXEC` when receiving file descriptors (@talex5 @avsm ocaml-multicore/eio#843). - eio_linux: `read_upto` and `write_single` didn't hold the FD open (@avsm ocaml-multicore/eio#871). This could be a problem if another fiber closed the FD before the operation was submitted. - eio_linux: handle ENOMEM from `io_uring_queue_init` (@talex5 ocaml-multicore/eio#852). We would already fall back to eio_posix if there wasn't enough lockable memory to add a fixed buffer, but didn't cope with not having enough memory for the ring itself. - fork_action: retry on `EINTR` when writing to pipe (@avsm ocaml-multicore/eio#870). - eio_windows: fix removing of FDs from read/write sets (@z-rui @talex5 ocaml-multicore/eio#861). Could cause high CPU use in some cases. - eio_windows: remove unused `unix_cstruct.ml` file (@talex5 ocaml-multicore/eio#817, reported by @dijkstracula). Caused an error if linking with `-linkall`. Minor changes: - Propagate `errno` back from `fork_actions` into `Eio.Process` (@Innf107 @avsm @talex5 ocaml-multicore/eio#854). Report Unix `fork_action` failures as Eio exceptions instead of `Failure`. This allows matching on specific errors (e.g. `Argument_list_too_long`). - Alias `Path.open_dir` to `open_subtree` (@talex5 @avsm ocaml-multicore/eio#853). This more accurately describes what it's for. - Prioritize returning `Fiber.any` value over cancelling quickly (@adamchol @talex5 ocaml-multicore/eio#806). This works better with the new `combine` option. - Relax return types of `Eio.Process.Pipe` (@Arogbonlo @patricoferris @talex5 ocaml-multicore/eio#775, requested by @rizo). - `Eio.Pool.use`: move `never_block` argument (@talex5 ocaml-multicore/eio#747). - eta expand some function applications to support OxCaml (@avsm ocaml-multicore/eio#898). - fork_action: reject ids that don't fit uid_t/gid_t/pid_t (@avsm ocaml-multicore/eio#895). Documentation: - eio_unix: minor typo in `Unix_error` docstring (@avsm ocaml-multicore/eio#888). - Simplify custom "env" type in example (@vog ocaml-multicore/eio#832). - Fix docs for `without_binding` (@patricoferris ocaml-multicore/eio#822). - Clarify Eio as a possible concurrency library (@patricoferris ocaml-multicore/eio#879). Code cleanups: - Add braces around switch case block (@olafhering ocaml-multicore/eio#882). - eio_linux: use `Uring.Res` module for safer error handling (@talex5 @avsm ocaml-multicore/eio#868). - eio_linux: move read/write retries out of scheduler (@talex5 @avsm ocaml-multicore/eio#849). - eio_linux: split out `net.ml`, `process.ml`, `fs.ml` and `time.ml` (@talex5 ocaml-multicore/eio#886). This more closely matches the layout in eio_posix. - eio_linux: remove unused code (@talex5 ocaml-multicore/eio#851). uring should never ask us to retry a job. - Remove all use of `[@@@Alert "-unstable"]` (@talex5 ocaml-multicore/eio#885). This was needed a long time ago to work around a bug in Merlin. - Remove some test files after running the tests (@avsm ocaml-multicore/eio#883). - win32: declare unixsupport functions as `CAMLextern` (@avsm @dra27 ocaml-multicore/eio#881). This is necessary under Windows to prevent flexdll errors. - Remove unused `show_backend_exceptions` flag (@talex5 ocaml-multicore/eio#880). - Improve formatting of IP addresses in tests (@talex5 ocaml-multicore/eio#847). - Add lintcstubs-arity as a test dependency (@talex5 ocaml-multicore/eio#846). - Update Dockerfiles to recent versions (@talex5 ocaml-multicore/eio#844). - Skip `test_alloc_fixed_or_wait` if no fixed buffers are available (@talex5 ocaml-multicore/eio#815). Prevents spurious CI failures. - Make `eio_unix_fork_error` call `_exit` automatically (@talex5 ocaml-multicore/eio#896).
talex5 added a commit to talex5/opam-repository that referenced this pull request
Jul 24, 2026CHANGES: Breaking changes: - Report errors from `Net.getaddrinfo` (@talex5 @haesbaert @avsm ocaml-multicore/eio#866 ocaml-multicore/eio#900). Before, `Net.getaddrinfo` returned `[]` on error. It now raises an exception with the actual error. New features: - Add `Eio.Net.Sockopt` for setting/getting socket options (@avsm @talex5 @anmonteiro ocaml-multicore/eio#858 ocaml-multicore/eio#575 ocaml-multicore/eio#859 ocaml-multicore/eio#874 ocaml-multicore/eio#876 ocaml-multicore/eio#889 ocaml-multicore/eio#891). This includes all the options from OCaml's `Unix` module, plus many more (e.g. `TCP_KEEPINTVL`). - Support `TCP_KEEPIDLE` socket option on macOS (@avsm @talex5 ocaml-multicore/eio#890). - Add `Path.chmod` (@patricoferris @webbunivAdmin @avsm @talex5 ocaml-multicore/eio#785 ocaml-multicore/eio#872). - Add `Path.chown` (@patricoferris @avsm @talex5 ocaml-multicore/eio#781 ocaml-multicore/eio#864 ocaml-multicore/eio#877). - Add `Path.with_dir_entries` for incremental directory reading (@patricoferris @talex5 @avsm ocaml-multicore/eio#821 ocaml-multicore/eio#897). This also provides the type of each entry, saving one `stat` per entry in most cases. - Add `Eio_unix.Pty` for pseudoterminal support (@avsm @talex5 @patricoferris @RyanGibb ocaml-multicore/eio#531). The `Pty` module can be used to create and configure pseudoterminals, `Eio_unix.Process.spawn_unix ?login_tty ...` allows connecting them up when spawning a child process. - Add `missing_ok` to `Eio.Path.unlink` (ocaml-multicore/eio#828) (@vog @patricoferris ocaml-multicore/eio#833). - Add `Flow.null` sink/source (@avsm @talex5 ocaml-multicore/eio#894, suggested by @jonsterling). This can be used as sink that consumes and discards all data written to it until end-of-file, and as a source that immediately returns end-of-file. - Add `Eio_unix.Process.spawn_unix ?uid ?gid ?pgid` options (@patricoferris @talex5 ocaml-multicore/eio#802 ocaml-multicore/eio#803). Allows setting the user ID, group ID and process group of the child. - Add `Eio_unix.Stdenv.override` for updating environments (@patricoferris @talex5 ocaml-multicore/eio#823). - Add `Eio_unix.Err` module (@talex5 ocaml-multicore/eio#887). This is convenient whenever wrapping a function that raises `Unix_error`. Linux backend: - eio_linux now requires Linux 5.18 or later. On older kernels, `Eio_main.run` will use eio_posix instead. - Add `Low_level.{socket,bind,listen}` with uring support (@avsm @talex5 ocaml-multicore/eio#884). - Add `ftruncate`/`fdatasync` and use uring for `fsync`/`shutdown` (@avsm @talex5 ocaml-multicore/eio#850). - Switch `fstat` to `statx` on linux and fetch `blksize` (@avsm @talex5 ocaml-multicore/eio#865). - uring: update min to 2.15.0+ so we can use new functionality (@avsm ocaml-multicore/eio#867). - Add `Eio_linux.Low_level.Fixed` (@talex5 ocaml-multicore/eio#848). This replaces the `Uring.Region` API. - eio_linux: use `IORING_SETUP_SINGLE_ISSUER` (@talex5 ocaml-multicore/eio#841). This hints to uring to do some locking optimisations assuming that each ring is only written by one thread. - eio_linux: use `IORING_SETUP_DEFER_TASKRUN` for performance (@talex5 ocaml-multicore/eio#842). Bug fixes: - Allow `Eio.Path.load` to handle files with zero size (@patricoferris @talex5 ocaml-multicore/eio#869 ocaml-multicore/eio#878, reported by @copy and @vog). This is useful for loading files in `/proc/` on Linux. - `Eio.Process`: match Unix search behaviour (@talex5 ocaml-multicore/eio#820). Don't search `$PATH` if the name contains a `/`. - eio_posix: on macOS, fall back to `select()` for FDs where `poll()` fails (@avsm @talex5 ocaml-multicore/eio#893, reported by @aaronjeline). macOS `poll()` returns `POLLNVAL` for some device FDs such as `/dev/tty` or `/dev/null`. - eio_posix: wait for a writer when first reading from a FIFO (@talex5 ocaml-multicore/eio#857). Before, it would return end-of-file if there was no waiter. - eio_posix: open confined paths in non-blocking mode too (@talex5 ocaml-multicore/eio#855). Previously, paths opened using `fs` were opened in non-blocking mode, but paths opened with `cwd` were not. This probably only affects FIFOs. - eio_posix: use `MSG_CMSG_CLOEXEC` when receiving file descriptors (@talex5 @avsm ocaml-multicore/eio#843). - eio_linux: `read_upto` and `write_single` didn't hold the FD open (@avsm ocaml-multicore/eio#871). This could be a problem if another fiber closed the FD before the operation was submitted. - eio_linux: handle ENOMEM from `io_uring_queue_init` (@talex5 ocaml-multicore/eio#852). We would already fall back to eio_posix if there wasn't enough lockable memory to add a fixed buffer, but didn't cope with not having enough memory for the ring itself. - fork_action: retry on `EINTR` when writing to pipe (@avsm ocaml-multicore/eio#870). - eio_windows: fix removing of FDs from read/write sets (@z-rui @talex5 ocaml-multicore/eio#861). Could cause high CPU use in some cases. - eio_windows: remove unused `unix_cstruct.ml` file (@talex5 ocaml-multicore/eio#817, reported by @dijkstracula). Caused an error if linking with `-linkall`. Minor changes: - Propagate `errno` back from `fork_actions` into `Eio.Process` (@Innf107 @avsm @talex5 ocaml-multicore/eio#854). Report Unix `fork_action` failures as Eio exceptions instead of `Failure`. This allows matching on specific errors (e.g. `Argument_list_too_long`). - Alias `Path.open_dir` to `open_subtree` (@talex5 @avsm ocaml-multicore/eio#853). This more accurately describes what it's for. - Prioritize returning `Fiber.any` value over cancelling quickly (@adamchol @talex5 ocaml-multicore/eio#806). This works better with the new `combine` option. - Relax return types of `Eio.Process.Pipe` (@Arogbonlo @patricoferris @talex5 ocaml-multicore/eio#775, requested by @rizo). - `Eio.Pool.use`: move `never_block` argument (@talex5 ocaml-multicore/eio#747). - eta expand some function applications to support OxCaml (@avsm ocaml-multicore/eio#898). - fork_action: reject ids that don't fit uid_t/gid_t/pid_t (@avsm ocaml-multicore/eio#895). Documentation: - eio_unix: minor typo in `Unix_error` docstring (@avsm ocaml-multicore/eio#888). - Simplify custom "env" type in example (@vog ocaml-multicore/eio#832). - Fix docs for `without_binding` (@patricoferris ocaml-multicore/eio#822). - Clarify Eio as a possible concurrency library (@patricoferris ocaml-multicore/eio#879). Code cleanups: - Add braces around switch case block (@olafhering ocaml-multicore/eio#882). - eio_linux: use `Uring.Res` module for safer error handling (@talex5 @avsm ocaml-multicore/eio#868). - eio_linux: move read/write retries out of scheduler (@talex5 @avsm ocaml-multicore/eio#849). - eio_linux: split out `net.ml`, `process.ml`, `fs.ml` and `time.ml` (@talex5 ocaml-multicore/eio#886). This more closely matches the layout in eio_posix. - eio_linux: remove unused code (@talex5 ocaml-multicore/eio#851). uring should never ask us to retry a job. - Remove all use of `[@@@Alert "-unstable"]` (@talex5 ocaml-multicore/eio#885). This was needed a long time ago to work around a bug in Merlin. - Remove some test files after running the tests (@avsm ocaml-multicore/eio#883). - win32: declare unixsupport functions as `CAMLextern` (@avsm @dra27 ocaml-multicore/eio#881). This is necessary under Windows to prevent flexdll errors. - Remove unused `show_backend_exceptions` flag (@talex5 ocaml-multicore/eio#880). - Improve formatting of IP addresses in tests (@talex5 ocaml-multicore/eio#847). - Add lintcstubs-arity as a test dependency (@talex5 ocaml-multicore/eio#846). - Update Dockerfiles to recent versions (@talex5 ocaml-multicore/eio#844). - Skip `test_alloc_fixed_or_wait` if no fixed buffers are available (@talex5 ocaml-multicore/eio#815). Prevents spurious CI failures. - Make `eio_unix_fork_error` call `_exit` automatically (@talex5 ocaml-multicore/eio#896).
craff pushed a commit to craff/opam-repository that referenced this pull request
Jul 25, 2026CHANGES: Breaking changes: - Report errors from `Net.getaddrinfo` (@talex5 @haesbaert @avsm ocaml-multicore/eio#866 ocaml-multicore/eio#900). Before, `Net.getaddrinfo` returned `[]` on error. It now raises an exception with the actual error. New features: - Add `Eio.Net.Sockopt` for setting/getting socket options (@avsm @talex5 @anmonteiro ocaml-multicore/eio#858 ocaml-multicore/eio#575 ocaml-multicore/eio#859 ocaml-multicore/eio#874 ocaml-multicore/eio#876 ocaml-multicore/eio#889 ocaml-multicore/eio#891). This includes all the options from OCaml's `Unix` module, plus many more (e.g. `TCP_KEEPINTVL`). - Support `TCP_KEEPIDLE` socket option on macOS (@avsm @talex5 ocaml-multicore/eio#890). - Add `Path.chmod` (@patricoferris @webbunivAdmin @avsm @talex5 ocaml-multicore/eio#785 ocaml-multicore/eio#872). - Add `Path.chown` (@patricoferris @avsm @talex5 ocaml-multicore/eio#781 ocaml-multicore/eio#864 ocaml-multicore/eio#877). - Add `Path.with_dir_entries` for incremental directory reading (@patricoferris @talex5 @avsm ocaml-multicore/eio#821 ocaml-multicore/eio#897). This also provides the type of each entry, saving one `stat` per entry in most cases. - Add `Eio_unix.Pty` for pseudoterminal support (@avsm @talex5 @patricoferris @RyanGibb ocaml-multicore/eio#531). The `Pty` module can be used to create and configure pseudoterminals, `Eio_unix.Process.spawn_unix ?login_tty ...` allows connecting them up when spawning a child process. - Add `missing_ok` to `Eio.Path.unlink` (ocaml-multicore/eio#828) (@vog @patricoferris ocaml-multicore/eio#833). - Add `Flow.null` sink/source (@avsm @talex5 ocaml-multicore/eio#894, suggested by @jonsterling). This can be used as sink that consumes and discards all data written to it until end-of-file, and as a source that immediately returns end-of-file. - Add `Eio_unix.Process.spawn_unix ?uid ?gid ?pgid` options (@patricoferris @talex5 ocaml-multicore/eio#802 ocaml-multicore/eio#803). Allows setting the user ID, group ID and process group of the child. - Add `Eio_unix.Stdenv.override` for updating environments (@patricoferris @talex5 ocaml-multicore/eio#823). - Add `Eio_unix.Err` module (@talex5 ocaml-multicore/eio#887). This is convenient whenever wrapping a function that raises `Unix_error`. Linux backend: - eio_linux now requires Linux 5.18 or later. On older kernels, `Eio_main.run` will use eio_posix instead. - Add `Low_level.{socket,bind,listen}` with uring support (@avsm @talex5 ocaml-multicore/eio#884). - Add `ftruncate`/`fdatasync` and use uring for `fsync`/`shutdown` (@avsm @talex5 ocaml-multicore/eio#850). - Switch `fstat` to `statx` on linux and fetch `blksize` (@avsm @talex5 ocaml-multicore/eio#865). - uring: update min to 2.15.0+ so we can use new functionality (@avsm ocaml-multicore/eio#867). - Add `Eio_linux.Low_level.Fixed` (@talex5 ocaml-multicore/eio#848). This replaces the `Uring.Region` API. - eio_linux: use `IORING_SETUP_SINGLE_ISSUER` (@talex5 ocaml-multicore/eio#841). This hints to uring to do some locking optimisations assuming that each ring is only written by one thread. - eio_linux: use `IORING_SETUP_DEFER_TASKRUN` for performance (@talex5 ocaml-multicore/eio#842). Bug fixes: - Allow `Eio.Path.load` to handle files with zero size (@patricoferris @talex5 ocaml-multicore/eio#869 ocaml-multicore/eio#878, reported by @copy and @vog). This is useful for loading files in `/proc/` on Linux. - `Eio.Process`: match Unix search behaviour (@talex5 ocaml-multicore/eio#820). Don't search `$PATH` if the name contains a `/`. - eio_posix: on macOS, fall back to `select()` for FDs where `poll()` fails (@avsm @talex5 ocaml-multicore/eio#893, reported by @aaronjeline). macOS `poll()` returns `POLLNVAL` for some device FDs such as `/dev/tty` or `/dev/null`. - eio_posix: wait for a writer when first reading from a FIFO (@talex5 ocaml-multicore/eio#857). Before, it would return end-of-file if there was no waiter. - eio_posix: open confined paths in non-blocking mode too (@talex5 ocaml-multicore/eio#855). Previously, paths opened using `fs` were opened in non-blocking mode, but paths opened with `cwd` were not. This probably only affects FIFOs. - eio_posix: use `MSG_CMSG_CLOEXEC` when receiving file descriptors (@talex5 @avsm ocaml-multicore/eio#843). - eio_linux: `read_upto` and `write_single` didn't hold the FD open (@avsm ocaml-multicore/eio#871). This could be a problem if another fiber closed the FD before the operation was submitted. - eio_linux: handle ENOMEM from `io_uring_queue_init` (@talex5 ocaml-multicore/eio#852). We would already fall back to eio_posix if there wasn't enough lockable memory to add a fixed buffer, but didn't cope with not having enough memory for the ring itself. - fork_action: retry on `EINTR` when writing to pipe (@avsm ocaml-multicore/eio#870). - eio_windows: fix removing of FDs from read/write sets (@z-rui @talex5 ocaml-multicore/eio#861). Could cause high CPU use in some cases. - eio_windows: remove unused `unix_cstruct.ml` file (@talex5 ocaml-multicore/eio#817, reported by @dijkstracula). Caused an error if linking with `-linkall`. Minor changes: - Propagate `errno` back from `fork_actions` into `Eio.Process` (@Innf107 @avsm @talex5 ocaml-multicore/eio#854). Report Unix `fork_action` failures as Eio exceptions instead of `Failure`. This allows matching on specific errors (e.g. `Argument_list_too_long`). - Alias `Path.open_dir` to `open_subtree` (@talex5 @avsm ocaml-multicore/eio#853). This more accurately describes what it's for. - Prioritize returning `Fiber.any` value over cancelling quickly (@adamchol @talex5 ocaml-multicore/eio#806). This works better with the new `combine` option. - Relax return types of `Eio.Process.Pipe` (@Arogbonlo @patricoferris @talex5 ocaml-multicore/eio#775, requested by @rizo). - `Eio.Pool.use`: move `never_block` argument (@talex5 ocaml-multicore/eio#747). - eta expand some function applications to support OxCaml (@avsm ocaml-multicore/eio#898). - fork_action: reject ids that don't fit uid_t/gid_t/pid_t (@avsm ocaml-multicore/eio#895). Documentation: - eio_unix: minor typo in `Unix_error` docstring (@avsm ocaml-multicore/eio#888). - Simplify custom "env" type in example (@vog ocaml-multicore/eio#832). - Fix docs for `without_binding` (@patricoferris ocaml-multicore/eio#822). - Clarify Eio as a possible concurrency library (@patricoferris ocaml-multicore/eio#879). Code cleanups: - Add braces around switch case block (@olafhering ocaml-multicore/eio#882). - eio_linux: use `Uring.Res` module for safer error handling (@talex5 @avsm ocaml-multicore/eio#868). - eio_linux: move read/write retries out of scheduler (@talex5 @avsm ocaml-multicore/eio#849). - eio_linux: split out `net.ml`, `process.ml`, `fs.ml` and `time.ml` (@talex5 ocaml-multicore/eio#886). This more closely matches the layout in eio_posix. - eio_linux: remove unused code (@talex5 ocaml-multicore/eio#851). uring should never ask us to retry a job. - Remove all use of `[@@@Alert "-unstable"]` (@talex5 ocaml-multicore/eio#885). This was needed a long time ago to work around a bug in Merlin. - Remove some test files after running the tests (@avsm ocaml-multicore/eio#883). - win32: declare unixsupport functions as `CAMLextern` (@avsm @dra27 ocaml-multicore/eio#881). This is necessary under Windows to prevent flexdll errors. - Remove unused `show_backend_exceptions` flag (@talex5 ocaml-multicore/eio#880). - Improve formatting of IP addresses in tests (@talex5 ocaml-multicore/eio#847). - Add lintcstubs-arity as a test dependency (@talex5 ocaml-multicore/eio#846). - Update Dockerfiles to recent versions (@talex5 ocaml-multicore/eio#844). - Skip `test_alloc_fixed_or_wait` if no fixed buffers are available (@talex5 ocaml-multicore/eio#815). Prevents spurious CI failures. - Make `eio_unix_fork_error` call `_exit` automatically (@talex5 ocaml-multicore/eio#896).
craff pushed a commit to craff/opam-repository that referenced this pull request
Jul 25, 2026CHANGES: Breaking changes: - Report errors from `Net.getaddrinfo` (@talex5 @haesbaert @avsm ocaml-multicore/eio#866 ocaml-multicore/eio#900). Before, `Net.getaddrinfo` returned `[]` on error. It now raises an exception with the actual error. New features: - Add `Eio.Net.Sockopt` for setting/getting socket options (@avsm @talex5 @anmonteiro ocaml-multicore/eio#858 ocaml-multicore/eio#575 ocaml-multicore/eio#859 ocaml-multicore/eio#874 ocaml-multicore/eio#876 ocaml-multicore/eio#889 ocaml-multicore/eio#891). This includes all the options from OCaml's `Unix` module, plus many more (e.g. `TCP_KEEPINTVL`). - Support `TCP_KEEPIDLE` socket option on macOS (@avsm @talex5 ocaml-multicore/eio#890). - Add `Path.chmod` (@patricoferris @webbunivAdmin @avsm @talex5 ocaml-multicore/eio#785 ocaml-multicore/eio#872). - Add `Path.chown` (@patricoferris @avsm @talex5 ocaml-multicore/eio#781 ocaml-multicore/eio#864 ocaml-multicore/eio#877). - Add `Path.with_dir_entries` for incremental directory reading (@patricoferris @talex5 @avsm ocaml-multicore/eio#821 ocaml-multicore/eio#897). This also provides the type of each entry, saving one `stat` per entry in most cases. - Add `Eio_unix.Pty` for pseudoterminal support (@avsm @talex5 @patricoferris @RyanGibb ocaml-multicore/eio#531). The `Pty` module can be used to create and configure pseudoterminals, `Eio_unix.Process.spawn_unix ?login_tty ...` allows connecting them up when spawning a child process. - Add `missing_ok` to `Eio.Path.unlink` (ocaml-multicore/eio#828) (@vog @patricoferris ocaml-multicore/eio#833). - Add `Flow.null` sink/source (@avsm @talex5 ocaml-multicore/eio#894, suggested by @jonsterling). This can be used as sink that consumes and discards all data written to it until end-of-file, and as a source that immediately returns end-of-file. - Add `Eio_unix.Process.spawn_unix ?uid ?gid ?pgid` options (@patricoferris @talex5 ocaml-multicore/eio#802 ocaml-multicore/eio#803). Allows setting the user ID, group ID and process group of the child. - Add `Eio_unix.Stdenv.override` for updating environments (@patricoferris @talex5 ocaml-multicore/eio#823). - Add `Eio_unix.Err` module (@talex5 ocaml-multicore/eio#887). This is convenient whenever wrapping a function that raises `Unix_error`. Linux backend: - eio_linux now requires Linux 5.18 or later. On older kernels, `Eio_main.run` will use eio_posix instead. - Add `Low_level.{socket,bind,listen}` with uring support (@avsm @talex5 ocaml-multicore/eio#884). - Add `ftruncate`/`fdatasync` and use uring for `fsync`/`shutdown` (@avsm @talex5 ocaml-multicore/eio#850). - Switch `fstat` to `statx` on linux and fetch `blksize` (@avsm @talex5 ocaml-multicore/eio#865). - uring: update min to 2.15.0+ so we can use new functionality (@avsm ocaml-multicore/eio#867). - Add `Eio_linux.Low_level.Fixed` (@talex5 ocaml-multicore/eio#848). This replaces the `Uring.Region` API. - eio_linux: use `IORING_SETUP_SINGLE_ISSUER` (@talex5 ocaml-multicore/eio#841). This hints to uring to do some locking optimisations assuming that each ring is only written by one thread. - eio_linux: use `IORING_SETUP_DEFER_TASKRUN` for performance (@talex5 ocaml-multicore/eio#842). Bug fixes: - Allow `Eio.Path.load` to handle files with zero size (@patricoferris @talex5 ocaml-multicore/eio#869 ocaml-multicore/eio#878, reported by @copy and @vog). This is useful for loading files in `/proc/` on Linux. - `Eio.Process`: match Unix search behaviour (@talex5 ocaml-multicore/eio#820). Don't search `$PATH` if the name contains a `/`. - eio_posix: on macOS, fall back to `select()` for FDs where `poll()` fails (@avsm @talex5 ocaml-multicore/eio#893, reported by @aaronjeline). macOS `poll()` returns `POLLNVAL` for some device FDs such as `/dev/tty` or `/dev/null`. - eio_posix: wait for a writer when first reading from a FIFO (@talex5 ocaml-multicore/eio#857). Before, it would return end-of-file if there was no waiter. - eio_posix: open confined paths in non-blocking mode too (@talex5 ocaml-multicore/eio#855). Previously, paths opened using `fs` were opened in non-blocking mode, but paths opened with `cwd` were not. This probably only affects FIFOs. - eio_posix: use `MSG_CMSG_CLOEXEC` when receiving file descriptors (@talex5 @avsm ocaml-multicore/eio#843). - eio_linux: `read_upto` and `write_single` didn't hold the FD open (@avsm ocaml-multicore/eio#871). This could be a problem if another fiber closed the FD before the operation was submitted. - eio_linux: handle ENOMEM from `io_uring_queue_init` (@talex5 ocaml-multicore/eio#852). We would already fall back to eio_posix if there wasn't enough lockable memory to add a fixed buffer, but didn't cope with not having enough memory for the ring itself. - fork_action: retry on `EINTR` when writing to pipe (@avsm ocaml-multicore/eio#870). - eio_windows: fix removing of FDs from read/write sets (@z-rui @talex5 ocaml-multicore/eio#861). Could cause high CPU use in some cases. - eio_windows: remove unused `unix_cstruct.ml` file (@talex5 ocaml-multicore/eio#817, reported by @dijkstracula). Caused an error if linking with `-linkall`. Minor changes: - Propagate `errno` back from `fork_actions` into `Eio.Process` (@Innf107 @avsm @talex5 ocaml-multicore/eio#854). Report Unix `fork_action` failures as Eio exceptions instead of `Failure`. This allows matching on specific errors (e.g. `Argument_list_too_long`). - Alias `Path.open_dir` to `open_subtree` (@talex5 @avsm ocaml-multicore/eio#853). This more accurately describes what it's for. - Prioritize returning `Fiber.any` value over cancelling quickly (@adamchol @talex5 ocaml-multicore/eio#806). This works better with the new `combine` option. - Relax return types of `Eio.Process.Pipe` (@Arogbonlo @patricoferris @talex5 ocaml-multicore/eio#775, requested by @rizo). - `Eio.Pool.use`: move `never_block` argument (@talex5 ocaml-multicore/eio#747). - eta expand some function applications to support OxCaml (@avsm ocaml-multicore/eio#898). - fork_action: reject ids that don't fit uid_t/gid_t/pid_t (@avsm ocaml-multicore/eio#895). Documentation: - eio_unix: minor typo in `Unix_error` docstring (@avsm ocaml-multicore/eio#888). - Simplify custom "env" type in example (@vog ocaml-multicore/eio#832). - Fix docs for `without_binding` (@patricoferris ocaml-multicore/eio#822). - Clarify Eio as a possible concurrency library (@patricoferris ocaml-multicore/eio#879). Code cleanups: - Add braces around switch case block (@olafhering ocaml-multicore/eio#882). - eio_linux: use `Uring.Res` module for safer error handling (@talex5 @avsm ocaml-multicore/eio#868). - eio_linux: move read/write retries out of scheduler (@talex5 @avsm ocaml-multicore/eio#849). - eio_linux: split out `net.ml`, `process.ml`, `fs.ml` and `time.ml` (@talex5 ocaml-multicore/eio#886). This more closely matches the layout in eio_posix. - eio_linux: remove unused code (@talex5 ocaml-multicore/eio#851). uring should never ask us to retry a job. - Remove all use of `[@@@Alert "-unstable"]` (@talex5 ocaml-multicore/eio#885). This was needed a long time ago to work around a bug in Merlin. - Remove some test files after running the tests (@avsm ocaml-multicore/eio#883). - win32: declare unixsupport functions as `CAMLextern` (@avsm @dra27 ocaml-multicore/eio#881). This is necessary under Windows to prevent flexdll errors. - Remove unused `show_backend_exceptions` flag (@talex5 ocaml-multicore/eio#880). - Improve formatting of IP addresses in tests (@talex5 ocaml-multicore/eio#847). - Add lintcstubs-arity as a test dependency (@talex5 ocaml-multicore/eio#846). - Update Dockerfiles to recent versions (@talex5 ocaml-multicore/eio#844). - Skip `test_alloc_fixed_or_wait` if no fixed buffers are available (@talex5 ocaml-multicore/eio#815). Prevents spurious CI failures. - Make `eio_unix_fork_error` call `_exit` automatically (@talex5 ocaml-multicore/eio#896).
craff pushed a commit to craff/opam-repository that referenced this pull request
Jul 25, 2026CHANGES: Breaking changes: - Report errors from `Net.getaddrinfo` (@talex5 @haesbaert @avsm ocaml-multicore/eio#866 ocaml-multicore/eio#900). Before, `Net.getaddrinfo` returned `[]` on error. It now raises an exception with the actual error. New features: - Add `Eio.Net.Sockopt` for setting/getting socket options (@avsm @talex5 @anmonteiro ocaml-multicore/eio#858 ocaml-multicore/eio#575 ocaml-multicore/eio#859 ocaml-multicore/eio#874 ocaml-multicore/eio#876 ocaml-multicore/eio#889 ocaml-multicore/eio#891). This includes all the options from OCaml's `Unix` module, plus many more (e.g. `TCP_KEEPINTVL`). - Support `TCP_KEEPIDLE` socket option on macOS (@avsm @talex5 ocaml-multicore/eio#890). - Add `Path.chmod` (@patricoferris @webbunivAdmin @avsm @talex5 ocaml-multicore/eio#785 ocaml-multicore/eio#872). - Add `Path.chown` (@patricoferris @avsm @talex5 ocaml-multicore/eio#781 ocaml-multicore/eio#864 ocaml-multicore/eio#877). - Add `Path.with_dir_entries` for incremental directory reading (@patricoferris @talex5 @avsm ocaml-multicore/eio#821 ocaml-multicore/eio#897). This also provides the type of each entry, saving one `stat` per entry in most cases. - Add `Eio_unix.Pty` for pseudoterminal support (@avsm @talex5 @patricoferris @RyanGibb ocaml-multicore/eio#531). The `Pty` module can be used to create and configure pseudoterminals, `Eio_unix.Process.spawn_unix ?login_tty ...` allows connecting them up when spawning a child process. - Add `missing_ok` to `Eio.Path.unlink` (ocaml-multicore/eio#828) (@vog @patricoferris ocaml-multicore/eio#833). - Add `Flow.null` sink/source (@avsm @talex5 ocaml-multicore/eio#894, suggested by @jonsterling). This can be used as sink that consumes and discards all data written to it until end-of-file, and as a source that immediately returns end-of-file. - Add `Eio_unix.Process.spawn_unix ?uid ?gid ?pgid` options (@patricoferris @talex5 ocaml-multicore/eio#802 ocaml-multicore/eio#803). Allows setting the user ID, group ID and process group of the child. - Add `Eio_unix.Stdenv.override` for updating environments (@patricoferris @talex5 ocaml-multicore/eio#823). - Add `Eio_unix.Err` module (@talex5 ocaml-multicore/eio#887). This is convenient whenever wrapping a function that raises `Unix_error`. Linux backend: - eio_linux now requires Linux 5.18 or later. On older kernels, `Eio_main.run` will use eio_posix instead. - Add `Low_level.{socket,bind,listen}` with uring support (@avsm @talex5 ocaml-multicore/eio#884). - Add `ftruncate`/`fdatasync` and use uring for `fsync`/`shutdown` (@avsm @talex5 ocaml-multicore/eio#850). - Switch `fstat` to `statx` on linux and fetch `blksize` (@avsm @talex5 ocaml-multicore/eio#865). - uring: update min to 2.15.0+ so we can use new functionality (@avsm ocaml-multicore/eio#867). - Add `Eio_linux.Low_level.Fixed` (@talex5 ocaml-multicore/eio#848). This replaces the `Uring.Region` API. - eio_linux: use `IORING_SETUP_SINGLE_ISSUER` (@talex5 ocaml-multicore/eio#841). This hints to uring to do some locking optimisations assuming that each ring is only written by one thread. - eio_linux: use `IORING_SETUP_DEFER_TASKRUN` for performance (@talex5 ocaml-multicore/eio#842). Bug fixes: - Allow `Eio.Path.load` to handle files with zero size (@patricoferris @talex5 ocaml-multicore/eio#869 ocaml-multicore/eio#878, reported by @copy and @vog). This is useful for loading files in `/proc/` on Linux. - `Eio.Process`: match Unix search behaviour (@talex5 ocaml-multicore/eio#820). Don't search `$PATH` if the name contains a `/`. - eio_posix: on macOS, fall back to `select()` for FDs where `poll()` fails (@avsm @talex5 ocaml-multicore/eio#893, reported by @aaronjeline). macOS `poll()` returns `POLLNVAL` for some device FDs such as `/dev/tty` or `/dev/null`. - eio_posix: wait for a writer when first reading from a FIFO (@talex5 ocaml-multicore/eio#857). Before, it would return end-of-file if there was no waiter. - eio_posix: open confined paths in non-blocking mode too (@talex5 ocaml-multicore/eio#855). Previously, paths opened using `fs` were opened in non-blocking mode, but paths opened with `cwd` were not. This probably only affects FIFOs. - eio_posix: use `MSG_CMSG_CLOEXEC` when receiving file descriptors (@talex5 @avsm ocaml-multicore/eio#843). - eio_linux: `read_upto` and `write_single` didn't hold the FD open (@avsm ocaml-multicore/eio#871). This could be a problem if another fiber closed the FD before the operation was submitted. - eio_linux: handle ENOMEM from `io_uring_queue_init` (@talex5 ocaml-multicore/eio#852). We would already fall back to eio_posix if there wasn't enough lockable memory to add a fixed buffer, but didn't cope with not having enough memory for the ring itself. - fork_action: retry on `EINTR` when writing to pipe (@avsm ocaml-multicore/eio#870). - eio_windows: fix removing of FDs from read/write sets (@z-rui @talex5 ocaml-multicore/eio#861). Could cause high CPU use in some cases. - eio_windows: remove unused `unix_cstruct.ml` file (@talex5 ocaml-multicore/eio#817, reported by @dijkstracula). Caused an error if linking with `-linkall`. Minor changes: - Propagate `errno` back from `fork_actions` into `Eio.Process` (@Innf107 @avsm @talex5 ocaml-multicore/eio#854). Report Unix `fork_action` failures as Eio exceptions instead of `Failure`. This allows matching on specific errors (e.g. `Argument_list_too_long`). - Alias `Path.open_dir` to `open_subtree` (@talex5 @avsm ocaml-multicore/eio#853). This more accurately describes what it's for. - Prioritize returning `Fiber.any` value over cancelling quickly (@adamchol @talex5 ocaml-multicore/eio#806). This works better with the new `combine` option. - Relax return types of `Eio.Process.Pipe` (@Arogbonlo @patricoferris @talex5 ocaml-multicore/eio#775, requested by @rizo). - `Eio.Pool.use`: move `never_block` argument (@talex5 ocaml-multicore/eio#747). - eta expand some function applications to support OxCaml (@avsm ocaml-multicore/eio#898). - fork_action: reject ids that don't fit uid_t/gid_t/pid_t (@avsm ocaml-multicore/eio#895). Documentation: - eio_unix: minor typo in `Unix_error` docstring (@avsm ocaml-multicore/eio#888). - Simplify custom "env" type in example (@vog ocaml-multicore/eio#832). - Fix docs for `without_binding` (@patricoferris ocaml-multicore/eio#822). - Clarify Eio as a possible concurrency library (@patricoferris ocaml-multicore/eio#879). Code cleanups: - Add braces around switch case block (@olafhering ocaml-multicore/eio#882). - eio_linux: use `Uring.Res` module for safer error handling (@talex5 @avsm ocaml-multicore/eio#868). - eio_linux: move read/write retries out of scheduler (@talex5 @avsm ocaml-multicore/eio#849). - eio_linux: split out `net.ml`, `process.ml`, `fs.ml` and `time.ml` (@talex5 ocaml-multicore/eio#886). This more closely matches the layout in eio_posix. - eio_linux: remove unused code (@talex5 ocaml-multicore/eio#851). uring should never ask us to retry a job. - Remove all use of `[@@@Alert "-unstable"]` (@talex5 ocaml-multicore/eio#885). This was needed a long time ago to work around a bug in Merlin. - Remove some test files after running the tests (@avsm ocaml-multicore/eio#883). - win32: declare unixsupport functions as `CAMLextern` (@avsm @dra27 ocaml-multicore/eio#881). This is necessary under Windows to prevent flexdll errors. - Remove unused `show_backend_exceptions` flag (@talex5 ocaml-multicore/eio#880). - Improve formatting of IP addresses in tests (@talex5 ocaml-multicore/eio#847). - Add lintcstubs-arity as a test dependency (@talex5 ocaml-multicore/eio#846). - Update Dockerfiles to recent versions (@talex5 ocaml-multicore/eio#844). - Skip `test_alloc_fixed_or_wait` if no fixed buffers are available (@talex5 ocaml-multicore/eio#815). Prevents spurious CI failures. - Make `eio_unix_fork_error` call `_exit` automatically (@talex5 ocaml-multicore/eio#896).
craff pushed a commit to craff/opam-repository that referenced this pull request
Jul 27, 2026CHANGES: Breaking changes: - Report errors from `Net.getaddrinfo` (@talex5 @haesbaert @avsm ocaml-multicore/eio#866 ocaml-multicore/eio#900). Before, `Net.getaddrinfo` returned `[]` on error. It now raises an exception with the actual error. New features: - Add `Eio.Net.Sockopt` for setting/getting socket options (@avsm @talex5 @anmonteiro ocaml-multicore/eio#858 ocaml-multicore/eio#575 ocaml-multicore/eio#859 ocaml-multicore/eio#874 ocaml-multicore/eio#876 ocaml-multicore/eio#889 ocaml-multicore/eio#891). This includes all the options from OCaml's `Unix` module, plus many more (e.g. `TCP_KEEPINTVL`). - Support `TCP_KEEPIDLE` socket option on macOS (@avsm @talex5 ocaml-multicore/eio#890). - Add `Path.chmod` (@patricoferris @webbunivAdmin @avsm @talex5 ocaml-multicore/eio#785 ocaml-multicore/eio#872). - Add `Path.chown` (@patricoferris @avsm @talex5 ocaml-multicore/eio#781 ocaml-multicore/eio#864 ocaml-multicore/eio#877). - Add `Path.with_dir_entries` for incremental directory reading (@patricoferris @talex5 @avsm ocaml-multicore/eio#821 ocaml-multicore/eio#897). This also provides the type of each entry, saving one `stat` per entry in most cases. - Add `Eio_unix.Pty` for pseudoterminal support (@avsm @talex5 @patricoferris @RyanGibb ocaml-multicore/eio#531). The `Pty` module can be used to create and configure pseudoterminals, `Eio_unix.Process.spawn_unix ?login_tty ...` allows connecting them up when spawning a child process. - Add `missing_ok` to `Eio.Path.unlink` (ocaml-multicore/eio#828) (@vog @patricoferris ocaml-multicore/eio#833). - Add `Flow.null` sink/source (@avsm @talex5 ocaml-multicore/eio#894, suggested by @jonsterling). This can be used as sink that consumes and discards all data written to it until end-of-file, and as a source that immediately returns end-of-file. - Add `Eio_unix.Process.spawn_unix ?uid ?gid ?pgid` options (@patricoferris @talex5 ocaml-multicore/eio#802 ocaml-multicore/eio#803). Allows setting the user ID, group ID and process group of the child. - Add `Eio_unix.Stdenv.override` for updating environments (@patricoferris @talex5 ocaml-multicore/eio#823). - Add `Eio_unix.Err` module (@talex5 ocaml-multicore/eio#887). This is convenient whenever wrapping a function that raises `Unix_error`. Linux backend: - eio_linux now requires Linux 5.18 or later. On older kernels, `Eio_main.run` will use eio_posix instead. - Add `Low_level.{socket,bind,listen}` with uring support (@avsm @talex5 ocaml-multicore/eio#884). - Add `ftruncate`/`fdatasync` and use uring for `fsync`/`shutdown` (@avsm @talex5 ocaml-multicore/eio#850). - Switch `fstat` to `statx` on linux and fetch `blksize` (@avsm @talex5 ocaml-multicore/eio#865). - uring: update min to 2.15.0+ so we can use new functionality (@avsm ocaml-multicore/eio#867). - Add `Eio_linux.Low_level.Fixed` (@talex5 ocaml-multicore/eio#848). This replaces the `Uring.Region` API. - eio_linux: use `IORING_SETUP_SINGLE_ISSUER` (@talex5 ocaml-multicore/eio#841). This hints to uring to do some locking optimisations assuming that each ring is only written by one thread. - eio_linux: use `IORING_SETUP_DEFER_TASKRUN` for performance (@talex5 ocaml-multicore/eio#842). Bug fixes: - Allow `Eio.Path.load` to handle files with zero size (@patricoferris @talex5 ocaml-multicore/eio#869 ocaml-multicore/eio#878, reported by @copy and @vog). This is useful for loading files in `/proc/` on Linux. - `Eio.Process`: match Unix search behaviour (@talex5 ocaml-multicore/eio#820). Don't search `$PATH` if the name contains a `/`. - eio_posix: on macOS, fall back to `select()` for FDs where `poll()` fails (@avsm @talex5 ocaml-multicore/eio#893, reported by @aaronjeline). macOS `poll()` returns `POLLNVAL` for some device FDs such as `/dev/tty` or `/dev/null`. - eio_posix: wait for a writer when first reading from a FIFO (@talex5 ocaml-multicore/eio#857). Before, it would return end-of-file if there was no waiter. - eio_posix: open confined paths in non-blocking mode too (@talex5 ocaml-multicore/eio#855). Previously, paths opened using `fs` were opened in non-blocking mode, but paths opened with `cwd` were not. This probably only affects FIFOs. - eio_posix: use `MSG_CMSG_CLOEXEC` when receiving file descriptors (@talex5 @avsm ocaml-multicore/eio#843). - eio_linux: `read_upto` and `write_single` didn't hold the FD open (@avsm ocaml-multicore/eio#871). This could be a problem if another fiber closed the FD before the operation was submitted. - eio_linux: handle ENOMEM from `io_uring_queue_init` (@talex5 ocaml-multicore/eio#852). We would already fall back to eio_posix if there wasn't enough lockable memory to add a fixed buffer, but didn't cope with not having enough memory for the ring itself. - fork_action: retry on `EINTR` when writing to pipe (@avsm ocaml-multicore/eio#870). - eio_windows: fix removing of FDs from read/write sets (@z-rui @talex5 ocaml-multicore/eio#861). Could cause high CPU use in some cases. - eio_windows: remove unused `unix_cstruct.ml` file (@talex5 ocaml-multicore/eio#817, reported by @dijkstracula). Caused an error if linking with `-linkall`. Minor changes: - Propagate `errno` back from `fork_actions` into `Eio.Process` (@Innf107 @avsm @talex5 ocaml-multicore/eio#854). Report Unix `fork_action` failures as Eio exceptions instead of `Failure`. This allows matching on specific errors (e.g. `Argument_list_too_long`). - Alias `Path.open_dir` to `open_subtree` (@talex5 @avsm ocaml-multicore/eio#853). This more accurately describes what it's for. - Prioritize returning `Fiber.any` value over cancelling quickly (@adamchol @talex5 ocaml-multicore/eio#806). This works better with the new `combine` option. - Relax return types of `Eio.Process.Pipe` (@Arogbonlo @patricoferris @talex5 ocaml-multicore/eio#775, requested by @rizo). - `Eio.Pool.use`: move `never_block` argument (@talex5 ocaml-multicore/eio#747). - eta expand some function applications to support OxCaml (@avsm ocaml-multicore/eio#898). - fork_action: reject ids that don't fit uid_t/gid_t/pid_t (@avsm ocaml-multicore/eio#895). Documentation: - eio_unix: minor typo in `Unix_error` docstring (@avsm ocaml-multicore/eio#888). - Simplify custom "env" type in example (@vog ocaml-multicore/eio#832). - Fix docs for `without_binding` (@patricoferris ocaml-multicore/eio#822). - Clarify Eio as a possible concurrency library (@patricoferris ocaml-multicore/eio#879). Code cleanups: - Add braces around switch case block (@olafhering ocaml-multicore/eio#882). - eio_linux: use `Uring.Res` module for safer error handling (@talex5 @avsm ocaml-multicore/eio#868). - eio_linux: move read/write retries out of scheduler (@talex5 @avsm ocaml-multicore/eio#849). - eio_linux: split out `net.ml`, `process.ml`, `fs.ml` and `time.ml` (@talex5 ocaml-multicore/eio#886). This more closely matches the layout in eio_posix. - eio_linux: remove unused code (@talex5 ocaml-multicore/eio#851). uring should never ask us to retry a job. - Remove all use of `[@@@Alert "-unstable"]` (@talex5 ocaml-multicore/eio#885). This was needed a long time ago to work around a bug in Merlin. - Remove some test files after running the tests (@avsm ocaml-multicore/eio#883). - win32: declare unixsupport functions as `CAMLextern` (@avsm @dra27 ocaml-multicore/eio#881). This is necessary under Windows to prevent flexdll errors. - Remove unused `show_backend_exceptions` flag (@talex5 ocaml-multicore/eio#880). - Improve formatting of IP addresses in tests (@talex5 ocaml-multicore/eio#847). - Add lintcstubs-arity as a test dependency (@talex5 ocaml-multicore/eio#846). - Update Dockerfiles to recent versions (@talex5 ocaml-multicore/eio#844). - Skip `test_alloc_fixed_or_wait` if no fixed buffers are available (@talex5 ocaml-multicore/eio#815). Prevents spurious CI failures. - Make `eio_unix_fork_error` call `_exit` automatically (@talex5 ocaml-multicore/eio#896).