CHANGES:
New features:
- eio_posix: use directory FDs instead of realpath (@talex5 ocaml-multicore/eio#694 ocaml-multicore/eio#696, reviewed by @SGrondin).
Using realpath was an old hack from the libuv days and subject to races. It was also slow.
- Keep pool of systhreads for blocking operations (@SGrondin @talex5 ocaml-multicore/eio#681).
This is much faster than creating a new thread for each operation.
It mainly benefits the eio_posix backend, as that uses lots of systhreads.
- Make `Switch.on_release` thread-safe (@talex5 ocaml-multicore/eio#684, requested by @art-w and @clecat).
This allows resource pools to be shared between domains easily.
- Add `Eio.Path.read_link` (@talex5 ocaml-multicore/eio#686).
- Add `Eio_unix.Fd.is_open` (@talex5 ocaml-multicore/eio#690).
- Include backtrace in systhread errors (@talex5 ocaml-multicore/eio#688, reviewed by @SGrondin).
Also, add `Eio.Exn.empty_backtrace` as a convenience.
- eio.mock: add tracing support to mock backend (@talex5 ocaml-multicore/eio#687).
- Improve tracing (@talex5 ocaml-multicore/eio#675 ocaml-multicore/eio#683 ocaml-multicore/eio#676, reviewed by @SGrondin).
Update tracing section of README and trace more things
(`run_in_systhread`, `close`, `submit`, `traceln`, cancellation and domain spawning).
Documentation:
- Link to verification work in docs (@talex5 ocaml-multicore/eio#682).
- Add more trace diagrams to README (@talex5 ocaml-multicore/eio#698).
- Adjust COC contacts (@polytypic ocaml-multicore/eio#685, reviewed by @Sudha247).
Bug fixes:
- eio_linux: retry `openat2` on `EAGAIN` (@talex5 ocaml-multicore/eio#693, reviewed by @SGrondin).
- eio_posix and eio_windows: check for IO periodically (@talex5 ocaml-multicore/eio#674).
- Handle EPERM when trying to initialise uring (@talex5 ocaml-multicore/eio#691).
This can happen when using a Docker container.
Build and tests:
- Benchmark `Eio_unix.run_in_systhread` (@talex5 ocaml-multicore/eio#678, reviewed by @SGrondin).
- Enable lintcstubs for `Eio_unix.Private` too (@talex5 ocaml-multicore/eio#689).
- Stat benchmark: report cleanup time and optimise (@talex5 ocaml-multicore/eio#692).
- Make benchmarks start faster (@talex5 ocaml-multicore/eio#673).
- Update build for new eio-trace CLI (@talex5 ocaml-multicore/eio#699).
- Expect opam-repo-ci tests to fail on macos (@talex5 ocaml-multicore/eio#672).