Releases: ocaml-multicore/eio
1.3
CHANGES:
Bug fixes:
-
posix: ensure
spawn_unixwraps errors when callingopenat(@dijkstracula #809). -
Use
O_RESOLVE_BENEATHon FreeBSD (@talex5 #810, reported by @dijkstracula).
FreeBSD needs-D__BSD_VISIBLEto be able to see this.
Fixed the CI bug this revealed, which had started also affecting macos. -
Ignore
ECONNRESETon close (@talex5 #787).
FreeBSD returnsECONNRESETin certain (unclear) circumstances, but it does still close the FD successfully.
If you care about this case, you should probably useshutdowninstead and check for it there.
Python and Ruby at least both explicitly check for and ignore this error too. -
On Windows, fix stdin broken-pipe and blocked domains (@bdodrem @talex5 #795).
- Ensure blocking FDs are ready before trying to use them.
- Replace
eio_windows_cstruct_stubs.cby Unix functions added in OCaml 5.2,
which correctly handle Window's strange use ofEPIPE.
Documentation:
-
Documentation fixes (@jonludlam #813).
Build fixes:
1.2
CHANGES:
Changes:
-
Make
fork_action.ha public header (@patricoferris #769, reviewed by @talex5).
Allows other libraries to add new actions. -
Record trace event when spawning processes (@talex5 #749).
Spawning a subprocess can take a long time in some cases, so show it clearly in the traces. -
Eio_unix.Net: make some return types more polymorphic (@talex5 #744).
Bug fixes:
Linux backend:
Windows backend:
-
Unregister FDs on cancel (@talex5 #756).
Fixesexception Unix.Unix_error(Unix.ENOTSOCK, "select", ""). -
Work around problems in
Unix.getaddrinfo(@talex5 #780).
Fixes e.g.No addresses found for host name "127.0.0.1". -
Group
ECONNABORTEDwith other connection reset errors (@talex5 #783). -
Check
has_symlinkfor tests (@create2000 #771, reviewed by @patricoferris and @talex5). -
Improve
openaterror handling (@talex5 #742, reported by @kentookura).
Fixesexception Unix.Unix_error(Unix.ENOENT, "openat", "").
Documentation:
-
examples/fs: show how to read files while scanning (@talex5 #745).
-
Add example to
Buf_read.seqdocumentation (@talex5 #739, requested by @darrenldl and @rizo).
Build and test:
1.1
CHANGES:
New features:
-
Add
Eio.Path.symlink(@patricoferris #715, reviewed by @talex5). -
Add
Eio.Pool.use ~never_block(@SGrondin #657, reviewed by @talex5). -
Add
Eio_unix.Net.import_socket_listening(@alyssais #733, reviewed by @talex5).
Documentation:
-
Add
examples/fsshowing how to walk a directory tree (@talex5 #730). -
README: explain that
read_allreads until shutdown (@talex5 #717, reported by @Wenke-D). -
Use long dash in README title (@lucperkins #718).
Linux backend:
-
Require Linux >= 5.15 (@talex5 #720, reviewed by @SGrondin and @avsm).
Removes a work-around that required checking whether every flow was a tty. -
Don't call submit immediately before wait (@talex5 #728).
This is slightly faster and makes the traces clearer. -
Don't record submit events when there's nothing to submit (@talex5 #729).
Makes the traces a bit clearer.
POSIX backend:
-
Add
_BSD_SOURCEflag to fix build on OpenBSD (@prgbln #722). -
Fix sandboxed path resolution on OpenBSD (@jebrosen #723, reviewed by @talex5).
OpenBSD usesELOOPwhen opening a symlink withO_NOFOLLOW.
Build and test:
1.0
CHANGES:
New features:
-
Add
Eio_unix.Capmodule to enable Capsicum mode (@talex5 #697, reviewed by @SGrondin). -
eio_linux: expose more functions in the
Low_levelmodule (@talex5 #705, reviewed by @SGrondin).
Add all the functions used by other parts of eio_linux (openat,mkdir,read_link,unlink,renameandpipe).
Tidied the API up a bit too:mkdir_beneathis now justmkdir.statx_confinedis now juststatx.open_diris gone; the single user now callsopenatdirectly.
Documentation:
-
Add README documentation for
Eio.Executor_pool(@SGrondin @talex5 #707, reviewed by @Sudha247). -
eio_linux: remove logging (@talex5 #708, requested by @clecat).
There were only two remaining uses of Logs, neither of which has proved useful.
Build:
-
Add upper-bound on MDX (@talex5 #706).
The new version attempts to execute included blocks. -
Fix tests to pass with both old and new Kcas (@polytypic #704).
-
Executor_pool: mention requested weight in error message (@talex5 #702, reported by @yawaramin).
0.15
CHANGES:
New features:
-
eio_posix: use directory FDs instead of realpath (@talex5 #694 #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 #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_releasethread-safe (@talex5 #684, requested by @art-w and @clecat).
This allows resource pools to be shared between domains easily. -
Include backtrace in systhread errors (@talex5 #688, reviewed by @SGrondin).
Also, addEio.Exn.empty_backtraceas a convenience. -
eio.mock: add tracing support to mock backend (@talex5 #687).
-
Improve tracing (@talex5 #675 #683 #676, reviewed by @SGrondin).
Update tracing section of README and trace more things
(run_in_systhread,close,submit,traceln, cancellation and domain spawning).
Documentation:
-
Adjust COC contacts (@polytypic #685, reviewed by @Sudha247).
Bug fixes:
-
eio_linux: retry
openat2onEAGAIN(@talex5 #693, reviewed by @SGrondin). -
eio_posix and eio_windows: check for IO periodically (@talex5 #674).
-
Handle EPERM when trying to initialise uring (@talex5 #691).
This can happen when using a Docker container.
Build and tests:
0.14
CHANGES:
New features / API changes:
-
Add
Eio.Executor_pool(@SGrondin #639, reviewed by @talex5).
Provides an easy way to distribute jobs across domains. -
Add
Fiber.first ~combineandFiber.n_any(@SGrondin @talex5 #587).
Allows keeping both results in the case where multiple fibers succeed. -
Add
Eio_mock.Backend.run_fullwith auto-advancing mock clock (@talex5 #644, reviewed by @SGrondin).
Simplifies testing of code using clocks. -
Add
Net.listening_addr(@mefyl #555, reviewed by @patricoferris @talex5).
Useful to get the socket's address if the OS assigns it. -
Remove
Cancel_hook_failedexception (@talex5 #640).
Didn't seem to be used and broke dscheck.
Tracing:
-
Improve tracing (@TheLortex @patricoferris @talex5 #656).
Trace cancellation contexts and OS operations, and simplify API. -
Add labels to switches (@talex5 #661, reviewed by @SGrondin).
-
Fiber.all: use the parent fiber (@talex5 #665, reviewed by @SGrondin).
Cleans up the traces a bit.
Performance:
-
Faster and simpler
Lf_queue(@talex5 #647, based on work by @polytypic). -
Optimise
Flow.copywithBuf_read.as_flow(@talex5 #663, reviewed by @SGrondin, reported by @leostera).
Bug fixes:
-
Fix handling of very long IO vectors (@talex5 #653, reported by @Cjen1).
-
eio_posix: use
caml_enter_blocking_sectionin more places (@talex5 #654, reviewed by @SGrondin). -
eio_posix: work around
caml_unix_alloc_sockaddrbug (@talex5 #651).
Documentation:
-
Fix quoting of quotes in process error messages (@talex5 #666, reviewed by @SGrondin).
-
Mention Path module in File and Fs documentation (@talex5 #659, requested by @clecat).
Build / internals:
0.13
CHANGES:
New features / API changes:
-
Add
Flow.read_all(@SGrondin #596, reviewed by @talex5 @rbjorklin). -
Add
Path.stat(@patricoferris @talex5 @avsm #617 #618 #624 #620, reviewed by @SGrondin). -
Add
Path.mkdirsandPath.split(@patricoferris @talex5 #625). -
Add
Eio.Path.{kind,is_file,is_directory}(@patricoferris @talex5 #623, reviewed by @avsm). -
Switch from CTF to OCaml 5.1 runtime events (@TheLortex @patricoferris @talex5 #634 #635, reviewed by @avsm).
This is a minimal initial version.
Documentation:
-
Update README section about
env(@talex5 #614, reported by @jonsterling).
Build and test changes:
0.12
CHANGES:
New features / API changes:
-
Replace objects with variants (@talex5 @patricoferris #553 #605 #608, reviewed by @avsm).
Some potential users found object types confusing, so we now use an alternative scheme for OS resources.
For users of the resources, the only thing that changes is the types:- Instead of taking an argument of type
#foo, you should now take_ foo. - Instead of returning a value of type
foo, you should now returnfoo_ty Eio.Resource.t.
To provide your own implementation of an interface, you now provide a module rather than an object.
For example, to provide your own source flow, useEio.Flow.Pi.source (module My_source).If you want to define your own interfaces, see the
Eio.Resourcemodule documentation. - Instead of taking an argument of type
-
Add
Eio.Pool(@talex5 @darrenldl #602, reviewed by @patricoferris).
A lock-free pool of resources. This is similar toLwt_pool. -
Add
Eio.Lazy(@talex5 #609, reviewed by @SGrondin).
If one fiber tries to force a lazy value while another is already doing it,
this will wait for the first one to finish rather than raising an exception (asStdlib.Lazydoes). -
Add
Eio.Path.native(@talex5 #603, reviewed by @patricoferris).
This is useful when interacting with non-Eio libraries, for spawning sub-processes, and for displaying paths to users. -
Add
Eio.Flow.Pi.simple_copy(@talex5 #611).
Provides an easy way to implement thecopyoperation when making your own sink. -
Eio_unix: add FD passing (@talex5 #522).
Allows opening a file and passing the handle over a Unix-domain socket. -
Add
Process.run ?is_successto control definition of success (@SGrondin #586, reviewed by @talex5). -
Add
Eio_mock.Domain_manager(@talex5 #610).
This mock domain manager runs everything in a single domain, allowing tests to remain deterministic. -
Add
Eio.Debug.with_trace_prefix(@talex5 #610).
Allows prefixing alltracelnoutput. The mock domain manager uses this to indicate which fake domain is running.
Bug fixes:
-
Fork actions must not allocate (@talex5 #593).
When using multiple domains, child processes could get stuck if they forked while another domain held the malloc lock. -
eio_posix: ignore some errors writing to the wake-up pipe (@talex5 #600).
If the pipe is full or closed, the wake-up should simply be ignored.
Build/test fixes:
0.11
CHANGES:
New features / API changes:
-
Extend
Eio.ConditionAPI (@talex5 #563).loop_no_mutexis a simpler and more efficient way to way for a condition.register_immediateallows integration with other IO libraries.
-
Expose
Eio.Stdenv.backend_id(@bord-o #560, reviewed by @talex5).
Useful in tests to report which backend is being used. -
Remove deprecated features (@talex5 #552, reviewed by @avsm).
These were all already marked as deprecated in v0.10 and are now gone completely:Fiber.fork_subEio_unix.{FD,Ipaddr,socketpair,getnameinfo}Eio_linux.{FD,get_fd,get_fd_opt}Eio_posix.Low_level.Fd
-
Allow calling
closemore than once (@talex5 #547, requested by @anmonteiro, reviewed by @patricoferris, @avsm). -
Add
closeto socket type (@talex5 #549).
Simplifies the type signatures a bit by avoiding having to mention this everywhere.
Bug fixes:
-
Fix handling of empty path strings (@talex5 #569, reported by @SGrondin).
Using "" instead of "." in some places resulted in an error. -
eio_posix: fix update to watched FDs on cancel (@talex5 #574, reported and reviewed by @quernd).
Cancelling the last watcher of an FD didn't remove it from the set passed topoll,
which could result in constant wake-ups. -
eio_posix: fix
preadat end-of-file (@talex5 #581, reported by @SGrondin).
It tried to return 0 instead ofEnd_of_file, triggering an assertion. -
eio_posix: don't reap non-Eio child processes (@talex5 #562).
This allows spawning processes with e.g. the stdlib or Lwt
(but see ocaml-multicore/lwt_eio#19 for Lwt support). -
Preserve backtraces across
Domain_manager.run(@talex5 #571).
See ocaml/ocaml#12362. -
Correct the backend selection for Cygwin (@dra27 #557).
Useeio_posix, noteio_windowsin this case.
Other changes:
-
Simplify dune files with dune 3.9's
build_if(@talex5 #582). -
Remove
WaitersfromEio_core(@talex5 #567).
Eio.Switchno longer uses this so it can finally be removed. -
Use
Fmt.Dump.signalto format signals (@talex5, @MisterDA #543).
Documentation:
0.10
New features / API changes:
-
Add
Eio.Processfor cross-platform subprocess support (@patricoferris @talex5 #499, reviewed by @anmonteiro @avsm @haesbaert). -
Add
Eio_unix.Net module(@talex5 #516, reviewed by @avsm).
The Unix network APIs have been cleaned up and moved here, and some missing datagram operations have been added.
sendnow takes an iovec, not just a single buffer. -
Add support for domain local await (@polytypic @talex5 #494 #503).
Allows sharing e.g. kcas data-structures across Eio and Domainslib domains. -
Add initial eio_windows backend (@patricoferris @talex5 #497 #530 #511 #523 #509, reviewed by @avsm @polytypic).
-
Remove eio_luv backend (@talex5 #485).
It was only used on Windows, and has been replaced by eio_windows. -
Unify
Eio_linux.FDandEio_posix.FdasEio_unix.Fd(@talex5 #491).
Now that eio_luv is gone, there is no need for different backends to have different types for wrapped file descriptors. -
Move
Eio.Stdenv.ttoEio_unix.Stdenv.base(@talex5 #498).
Note that the rest ofEio.Stdenvis still there; only the definition of a full Unix-like environment has moved. -
Deprecation cleanups (@talex5 #508).
Removed some APIs that were already marked as deprecated in Eio 0.8.
Bug fixes:
-
eio_linux: fall back to
forkifclone3is unavailable (@talex5 #524, reported by @smondet, reviewed by @avsm).
Docker's default security policy blocksclone3. -
Don't call
accept_fork's error handler on cancellation (@talex5 #520).
This isn't an error and should not be reported. -
Fix
eio_unix_is_blockingC stub (@patricoferris #505, reviewed by @talex5). -
Fix
Condition.await bugwhen cancelling (@polytypic @talex5 #487). -
Buf_write: fix flush returning too early (@talex5 #539, reported by @cometkim).
-
Ignore
ENOTCONNerrors on socket shutdown (@avsm #533, reported by @patricoferris, reviewed by @talex5).
Documentation:
-
Link to developer meetings information (@talex5 @Sudha247 #515).
-
Add README links to Meio and Lambda Capabilities blog post (@talex5 #496).
-
Document mirage
Ipaddrconversion (@RyanGibb @patricoferris @talex5 #492). -
Document how to use Domainslib from Eio (@talex5 #489, reviewed by @polytypic @patricoferris).
Other changes: