2026-06-09 09:12.31: New job: test ocaml-multicore/eio https://github.com/ocaml-multicore/eio.git#refs/heads/main (bd0ad09655affb1f459db81a16f8a4d640b7cb41) (linux-ppc64:debian-13-5.4_ppc64_opam-2.5) Base: ocaml/opam:debian-13-ocaml-5.4@sha256:e72a31a6247b03c00cdaffe88301eab53afb80cfe9d5b842204827887236bd61 Opam project build To reproduce locally: git clone --recursive "https://github.com/ocaml-multicore/eio.git" -b "main" && cd "eio" && git reset --hard bd0ad096 cat > Dockerfile <<'END-OF-DOCKERFILE' FROM ocaml/opam:debian-13-ocaml-5.4@sha256:e72a31a6247b03c00cdaffe88301eab53afb80cfe9d5b842204827887236bd61 # debian-13-5.4_ppc64_opam-2.5 USER 1000:1000 ENV CLICOLOR_FORCE="1" ENV OPAMCOLOR="always" WORKDIR /src RUN sudo ln -f /usr/bin/opam-2.5 /usr/bin/opam RUN cd ~/opam-repository && (git cat-file -e c98b21e24c088665ccae4c3b53eadadd3b755b15 || git fetch origin master) && git reset -q --hard c98b21e24c088665ccae4c3b53eadadd3b755b15 && git log --no-decorate -n1 --oneline RUN opam init --reinit -ni RUN uname -rs && opam exec -- ocaml -version && opam --version WORKDIR /src RUN sudo chown opam /src RUN opam update -u COPY --chown=1000:1000 eio_windows.opam eio_posix.opam eio_main.opam eio_linux.opam eio.opam ./ RUN opam pin add -yn eio_windows.dev './' && \ opam pin add -yn eio_posix.dev './' && \ opam pin add -yn eio_main.dev './' && \ opam pin add -yn eio_linux.dev './' && \ opam pin add -yn eio.dev './' RUN echo '(lang dune 3.0)' > './dune-project' ENV DEPS="afl-persistent.1.4 alcotest.1.9.1 astring.0.8.5 backoff.0.1.1 base-bigarray.base base-domains.base base-effects.base base-nnp.base base-threads.base base-unix.base bigstringaf.0.10.0 camlp-streams.5.0.1 cmdliner.2.1.1 conf-bash.1 containers.3.18 cppo.1.8.0 crowbar.0.2.2 csexp.1.5.2 cstruct.6.2.0 domain-local-await.1.0.1 domain-local-timeout.1.0.1 dscheck.0.5.0 dune.3.23.1 dune-configurator.3.23.1 either.1.0.0 fmt.0.11.0 hmap.0.8.1 iomux.0.4 kcas.0.7.0 lintcstubs-arity.0.5.2 logs.0.10.0 lwt-dllist.1.1.0 mdx.2.5.2 mtime.2.1.0 multicore-magic.2.3.2 ocaml.5.4.1 ocaml-base-compiler.5.4.1 ocaml-compiler.5.4.1 ocaml-config.3 ocaml-options-vanilla.1 ocaml-syntax-shims.1.0.0 ocaml-version.4.1.1 ocamlbuild.0.16.1 ocamlfind.1.9.8 optint.0.3.0 oseq.0.5.1 psq.0.2.1 re.1.14.0 result.1.5 seq.base stdlib-shims.0.3.0 thread-table.1.0.0 topkg.1.1.1 tsort.2.2.0 uring.2.14.0 uutf.1.0.4 yojson.3.0.0" ENV CI="true" ENV OCAMLCI="true" RUN opam update --depexts && opam install --cli=2.5 --depext-only -y eio_windows.dev eio_posix.dev eio_main.dev eio_linux.dev eio.dev $DEPS RUN opam install $DEPS COPY --chown=1000:1000 . /src RUN opam exec -- dune build @install @check @runtest && rm -rf _build END-OF-DOCKERFILE docker build . END-REPRO-BLOCK 2026-06-09 09:12.31: Using cache hint "ocaml-multicore/eio-ocaml/opam:debian-13-ocaml-5.4@sha256:e72a31a6247b03c00cdaffe88301eab53afb80cfe9d5b842204827887236bd61-debian-13-5.4_ppc64_opam-2.5-12c456a1f67161cdda644e9d789b7618" 2026-06-09 09:12.31: Using OBuilder spec: ((from ocaml/opam:debian-13-ocaml-5.4@sha256:e72a31a6247b03c00cdaffe88301eab53afb80cfe9d5b842204827887236bd61) (comment debian-13-5.4_ppc64_opam-2.5) (user (uid 1000) (gid 1000)) (env CLICOLOR_FORCE 1) (env OPAMCOLOR always) (workdir /src) (run (shell "sudo ln -f /usr/bin/opam-2.5 /usr/bin/opam")) (run (cache (opam-archives (target /home/opam/.opam/download-cache))) (network host) (shell "cd ~/opam-repository && (git cat-file -e c98b21e24c088665ccae4c3b53eadadd3b755b15 || git fetch origin master) && git reset -q --hard c98b21e24c088665ccae4c3b53eadadd3b755b15 && git log --no-decorate -n1 --oneline")) (run (shell "opam init --reinit -ni")) (run (shell "uname -rs && opam exec -- ocaml -version && opam --version")) (workdir /src) (run (shell "sudo chown opam /src")) (run (cache (opam-archives (target /home/opam/.opam/download-cache))) (network host) (shell "opam update -u")) (copy (src eio_windows.opam eio_posix.opam eio_main.opam eio_linux.opam eio.opam) (dst ./)) (run (network host) (shell "opam pin add -yn eio_windows.dev './' && \ \nopam pin add -yn eio_posix.dev './' && \ \nopam pin add -yn eio_main.dev './' && \ \nopam pin add -yn eio_linux.dev './' && \ \nopam pin add -yn eio.dev './'")) (run (shell "echo '(lang dune 3.0)' > './dune-project'")) (env DEPS "afl-persistent.1.4 alcotest.1.9.1 astring.0.8.5 backoff.0.1.1 base-bigarray.base base-domains.base base-effects.base base-nnp.base base-threads.base base-unix.base bigstringaf.0.10.0 camlp-streams.5.0.1 cmdliner.2.1.1 conf-bash.1 containers.3.18 cppo.1.8.0 crowbar.0.2.2 csexp.1.5.2 cstruct.6.2.0 domain-local-await.1.0.1 domain-local-timeout.1.0.1 dscheck.0.5.0 dune.3.23.1 dune-configurator.3.23.1 either.1.0.0 fmt.0.11.0 hmap.0.8.1 iomux.0.4 kcas.0.7.0 lintcstubs-arity.0.5.2 logs.0.10.0 lwt-dllist.1.1.0 mdx.2.5.2 mtime.2.1.0 multicore-magic.2.3.2 ocaml.5.4.1 ocaml-base-compiler.5.4.1 ocaml-compiler.5.4.1 ocaml-config.3 ocaml-options-vanilla.1 ocaml-syntax-shims.1.0.0 ocaml-version.4.1.1 ocamlbuild.0.16.1 ocamlfind.1.9.8 optint.0.3.0 oseq.0.5.1 psq.0.2.1 re.1.14.0 result.1.5 seq.base stdlib-shims.0.3.0 thread-table.1.0.0 topkg.1.1.1 tsort.2.2.0 uring.2.14.0 uutf.1.0.4 yojson.3.0.0") (env CI true) (env OCAMLCI true) (run (cache (opam-archives (target /home/opam/.opam/download-cache))) (network host) (shell "opam update --depexts && opam install --cli=2.5 --depext-only -y eio_windows.dev eio_posix.dev eio_main.dev eio_linux.dev eio.dev $DEPS")) (run (cache (opam-archives (target /home/opam/.opam/download-cache))) (network host) (shell "opam install $DEPS")) (copy (src .) (dst /src)) (run (shell "opam exec -- dune build @install @check @runtest && rm -rf _build")) ) 2026-06-09 09:12.31: Waiting for resource in pool OCluster 2026-06-09 09:12.31: Waiting for worker… 2026-06-09 09:12.31: Got resource from pool OCluster Building on scyleia.caelum.ci.dev hint: Using 'master' as the name for the initial branch. This default branch name hint: will change to "main" in Git 3.0. To configure the initial branch name hint: to use in all of your new repositories, which will suppress this warning, hint: call: hint: hint: git config --global init.defaultBranch <name> hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m <name> hint: hint: Disable this message with "git config set advice.defaultBranchName false" Initialized empty Git repository in /var/cache/obuilder/ocluster/git/eio.git-2ac56b2ed1de05e0591ad64f831b4a4fd3ce42f2/.git/ HEAD is now at bd0ad09 Merge pull request #849 from talex5/simplify-rw (from ocaml/opam:debian-13-ocaml-5.4@sha256:e72a31a6247b03c00cdaffe88301eab53afb80cfe9d5b842204827887236bd61) 2026-06-09 09:12.33 ---> using "091802f641e43489888e795f557a1cae54c49b7ec9e137997252e3e6eba01965" from cache /: (comment debian-13-5.4_ppc64_opam-2.5) /: (user (uid 1000) (gid 1000)) /: (env CLICOLOR_FORCE 1) /: (env OPAMCOLOR always) /: (workdir /src) /src: (run (shell "sudo ln -f /usr/bin/opam-2.5 /usr/bin/opam")) 2026-06-09 09:12.33 ---> using "0ee279940b26dd10f348f43f792f93feb82f2fb33f7e66c55bc5a62156e66b97" from cache /src: (run (cache (opam-archives (target /home/opam/.opam/download-cache))) (network host) (shell "cd ~/opam-repository && (git cat-file -e c98b21e24c088665ccae4c3b53eadadd3b755b15 || git fetch origin master) && git reset -q --hard c98b21e24c088665ccae4c3b53eadadd3b755b15 && git log --no-decorate -n1 --oneline")) From https://github.com/ocaml/opam-repository * branch master -> FETCH_HEAD fc08333d1b..8e7cc3fd7b master -> origin/master c98b21e24c Merge pull request #29993 from shonfeder/conditional-mdx-tests 2026-06-09 09:12.33 ---> using "13a9d443c32297c749086da3f5672da2fe59f209abff55655ff6d218f85deead" from cache /src: (run (shell "opam init --reinit -ni")) Configuring from /home/opam/.opamrc and then from built-in defaults. Checking for available remotes: rsync and local, git. - you won't be able to use mercurial repositories unless you install the hg command on your system. - you won't be able to use darcs repositories unless you install the darcs command on your system. This version of opam requires an update to the layout of /home/opam/.opam from version 2.1 to version 2.2, which can't be reverted. You may want to back it up before going further. Continue? [Y/n] y [NOTE] The 'jobs' option was reset, its value was 1 and its new value will vary according to the current number of cores on your machine. You can restore the fixed value using: opam option jobs=1 --global Format upgrade done. <><> Updating repositories ><><><><><><><><><><><><><><><><><><><><><><><><><><> [default] synchronised from git+file:///home/opam/opam-repository 2026-06-09 09:12.33 ---> using "6e0535fbec659006f6fde21902fd310b45455212e94648c7bbba909542b284b4" from cache /src: (run (shell "uname -rs && opam exec -- ocaml -version && opam --version")) Linux 7.0.0-22-generic The OCaml toplevel, version 5.4.1 2.5.1 2026-06-09 09:12.33 ---> using "0c437a3e83fce9fac8d4ba7cd6f3282ad65071c083f20212e634cab81edfcf47" from cache /src: (workdir /src) /src: (run (shell "sudo chown opam /src")) 2026-06-09 09:12.33 ---> using "23e278cdaa115f8e5a4757ff18b9c97db8e73dcd74c0cf6c5823342b289c674f" from cache /src: (run (cache (opam-archives (target /home/opam/.opam/download-cache))) (network host) (shell "opam update -u")) <><> Updating package repositories ><><><><><><><><><><><><><><><><><><><><><><> [default] no changes from git+file:///home/opam/opam-repository Everything as up-to-date as possible The following packages are not being upgraded because the new versions conflict with other installed packages: - ocaml.5.5.0 - ocaml-compiler.5.4.1+lrgrep -- ocaml-base-compiler.5.4.1 is installed and requires ocaml-compiler = 5.4.1 However, you may "opam upgrade" these packages explicitly at these versions (e.g. "opam upgrade ocaml.5.5.0"), which will ask permission to downgrade or uninstall the conflicting packages. Nothing to do. # To update the current shell environment, run: eval $(opam env) 2026-06-09 09:12.33 ---> using "d3212f1f1390faeb8423e07420ce14fa95036affcb6f6616cdcc8a1c311b1744" from cache /src: (copy (src eio_windows.opam eio_posix.opam eio_main.opam eio_linux.opam eio.opam) (dst ./)) 2026-06-09 09:12.33 ---> saved as "4f4088437ed469921da7644c5ef4964d3147a87a96968ba06e20fcdd235ecdbf" /src: (run (network host) (shell "opam pin add -yn eio_windows.dev './' && \ \nopam pin add -yn eio_posix.dev './' && \ \nopam pin add -yn eio_main.dev './' && \ \nopam pin add -yn eio_linux.dev './' && \ \nopam pin add -yn eio.dev './'")) [eio_windows.dev] synchronised (file:///src) eio_windows is now pinned to file:///src (version dev) [eio_posix.dev] synchronised (file:///src) eio_posix is now pinned to file:///src (version dev) [eio_main.dev] synchronised (file:///src) eio_main is now pinned to file:///src (version dev) [eio_linux.dev] synchronised (file:///src) eio_linux is now pinned to file:///src (version dev) [eio.dev] synchronised (file:///src) eio is now pinned to file:///src (version dev) 2026-06-09 09:12.42 ---> saved as "e23a53fd2bcb4df693cd5ba939cb522738f381bf7d428d57cdb481c80e3a9dee" /src: (run (shell "echo '(lang dune 3.0)' > './dune-project'")) 2026-06-09 09:12.42 ---> saved as "582a85af4d586a2649441ee0ca6186c7891d048916c7f05bf7133f6efe472081" /src: (env DEPS "afl-persistent.1.4 alcotest.1.9.1 astring.0.8.5 backoff.0.1.1 base-bigarray.base base-domains.base base-effects.base base-nnp.base base-threads.base base-unix.base bigstringaf.0.10.0 camlp-streams.5.0.1 cmdliner.2.1.1 conf-bash.1 containers.3.18 cppo.1.8.0 crowbar.0.2.2 csexp.1.5.2 cstruct.6.2.0 domain-local-await.1.0.1 domain-local-timeout.1.0.1 dscheck.0.5.0 dune.3.23.1 dune-configurator.3.23.1 either.1.0.0 fmt.0.11.0 hmap.0.8.1 iomux.0.4 kcas.0.7.0 lintcstubs-arity.0.5.2 logs.0.10.0 lwt-dllist.1.1.0 mdx.2.5.2 mtime.2.1.0 multicore-magic.2.3.2 ocaml.5.4.1 ocaml-base-compiler.5.4.1 ocaml-compiler.5.4.1 ocaml-config.3 ocaml-options-vanilla.1 ocaml-syntax-shims.1.0.0 ocaml-version.4.1.1 ocamlbuild.0.16.1 ocamlfind.1.9.8 optint.0.3.0 oseq.0.5.1 psq.0.2.1 re.1.14.0 result.1.5 seq.base stdlib-shims.0.3.0 thread-table.1.0.0 topkg.1.1.1 tsort.2.2.0 uring.2.14.0 uutf.1.0.4 yojson.3.0.0") /src: (env CI true) /src: (env OCAMLCI true) /src: (run (cache (opam-archives (target /home/opam/.opam/download-cache))) (network host) (shell "opam update --depexts && opam install --cli=2.5 --depext-only -y eio_windows.dev eio_posix.dev eio_main.dev eio_linux.dev eio.dev $DEPS")) + /usr/bin/sudo "apt-get" "update" - Get:1 http://deb.debian.org/debian trixie InRelease [140 kB] - Get:2 http://deb.debian.org/debian trixie-updates InRelease [47.3 kB] - Get:3 http://deb.debian.org/debian-security trixie-security InRelease [43.4 kB] - Get:4 http://deb.debian.org/debian trixie/main ppc64el Packages [9509 kB] - Get:5 http://deb.debian.org/debian-security trixie-security/main ppc64el Packages [201 kB] - Fetched 9940 kB in 2s (4916 kB/s) - Reading package lists... - <><> Synchronising pinned packages ><><><><><><><><><><><><><><><><><><><><><><> [eio.dev] synchronised (file:///src) [eio_linux.dev] synchronised (file:///src) [eio_main.dev] synchronised (file:///src) [eio_posix.dev] synchronised (file:///src) [eio_windows.dev] synchronised (file:///src) [NOTE] Package ocaml-options-vanilla is already installed (current version is 1). [NOTE] Package ocaml-config is already installed (current version is 3). [NOTE] Package ocaml-compiler is already installed (current version is 5.4.1). [NOTE] Package ocaml-base-compiler is already installed (current version is 5.4.1). [NOTE] Package ocaml is already installed (current version is 5.4.1). [NOTE] Package base-unix is already installed (current version is base). [NOTE] Package base-threads is already installed (current version is base). [NOTE] Package base-nnp is already installed (current version is base). [NOTE] Package base-effects is already installed (current version is base). [NOTE] Package base-domains is already installed (current version is base). [NOTE] Package base-bigarray is already installed (current version is base). # To update the current shell environment, run: eval $(opam env) 2026-06-09 09:12.56 ---> saved as "85592b35fca7b01b1fb93e43763b26997e4cfa4db33f519dbd0d8551500e128f" /src: (run (cache (opam-archives (target /home/opam/.opam/download-cache))) (network host) (shell "opam install $DEPS")) [NOTE] Package ocaml-options-vanilla is already installed (current version is 1). [NOTE] Package ocaml-config is already installed (current version is 3). [NOTE] Package ocaml-compiler is already installed (current version is 5.4.1). [NOTE] Package ocaml-base-compiler is already installed (current version is 5.4.1). [NOTE] Package ocaml is already installed (current version is 5.4.1). [NOTE] Package base-unix is already installed (current version is base). [NOTE] Package base-threads is already installed (current version is base). [NOTE] Package base-nnp is already installed (current version is base). [NOTE] Package base-effects is already installed (current version is base). [NOTE] Package base-domains is already installed (current version is base). [NOTE] Package base-bigarray is already installed (current version is base). The following actions will be performed: === install 46 packages - install afl-persistent 1.4 - install alcotest 1.9.1 - install astring 0.8.5 - install backoff 0.1.1 - install bigstringaf 0.10.0 - install camlp-streams 5.0.1 - install cmdliner 2.1.1 - install conf-bash 1 - install containers 3.18 - install cppo 1.8.0 - install crowbar 0.2.2 - install csexp 1.5.2 - install cstruct 6.2.0 - install domain-local-await 1.0.1 - install domain-local-timeout 1.0.1 - install dscheck 0.5.0 - install dune 3.23.1 - install dune-configurator 3.23.1 - install either 1.0.0 - install fmt 0.11.0 - install hmap 0.8.1 - install iomux 0.4 - install kcas 0.7.0 - install lintcstubs-arity 0.5.2 - install logs 0.10.0 - install lwt-dllist 1.1.0 - install mdx 2.5.2 - install mtime 2.1.0 - install multicore-magic 2.3.2 - install ocaml-syntax-shims 1.0.0 - install ocaml-version 4.1.1 - install ocamlbuild 0.16.1 - install ocamlfind 1.9.8 - install optint 0.3.0 - install oseq 0.5.1 - install psq 0.2.1 - install re 1.14.0 - install result 1.5 - install seq base - install stdlib-shims 0.3.0 - install thread-table 1.0.0 - install topkg 1.1.1 - install tsort 2.2.0 - install uring 2.14.0 - install uutf 1.0.4 - install yojson 3.0.0 <><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><> -> retrieved alcotest.1.9.1 (cached) -> retrieved astring.0.8.5 (cached) -> retrieved bigstringaf.0.10.0 (cached) -> retrieved camlp-streams.5.0.1 (cached) -> retrieved backoff.0.1.1 (https://opam.ocaml.org/cache) -> installed conf-bash.1 -> retrieved cmdliner.2.1.1 (cached) -> retrieved afl-persistent.1.4 (https://opam.ocaml.org/cache) -> retrieved cppo.1.8.0 (cached) -> retrieved csexp.1.5.2 (cached) -> retrieved cstruct.6.2.0 (cached) -> retrieved domain-local-await.1.0.1 (cached) -> retrieved crowbar.0.2.2 (https://opam.ocaml.org/cache) -> retrieved domain-local-timeout.1.0.1 (https://opam.ocaml.org/cache) -> retrieved containers.3.18 (https://opam.ocaml.org/cache) -> retrieved dscheck.0.5.0 (https://opam.ocaml.org/cache) -> retrieved fmt.0.11.0 (cached) -> retrieved hmap.0.8.1 (cached) -> retrieved either.1.0.0 (https://opam.ocaml.org/cache) -> retrieved iomux.0.4 (cached) -> retrieved lintcstubs-arity.0.5.2 (https://opam.ocaml.org/cache) -> retrieved kcas.0.7.0 (https://opam.ocaml.org/cache) -> retrieved logs.0.10.0 (cached) -> retrieved lwt-dllist.1.1.0 (cached) -> retrieved mtime.2.1.0 (cached) -> retrieved mdx.2.5.2 (cached) -> retrieved ocaml-syntax-shims.1.0.0 (cached) -> retrieved ocaml-version.4.1.1 (cached) -> retrieved multicore-magic.2.3.2 (https://opam.ocaml.org/cache) -> retrieved ocamlbuild.0.16.1 (cached) -> retrieved ocamlfind.1.9.8 (cached) -> retrieved optint.0.3.0 (cached) -> retrieved psq.0.2.1 (cached) -> retrieved re.1.14.0 (cached) -> retrieved result.1.5 (cached) -> retrieved seq.base (cached) -> installed seq.base -> retrieved stdlib-shims.0.3.0 (cached) -> retrieved oseq.0.5.1 (https://opam.ocaml.org/cache) -> retrieved thread-table.1.0.0 (cached) -> retrieved topkg.1.1.1 (cached) -> retrieved dune.3.23.1, dune-configurator.3.23.1 (cached) -> retrieved uring.2.14.0 (cached) -> retrieved uutf.1.0.4 (cached) -> retrieved tsort.2.2.0 (https://opam.ocaml.org/cache) -> retrieved yojson.3.0.0 (cached) -> installed cmdliner.2.1.1 -> installed ocamlbuild.0.16.1 -> installed ocamlfind.1.9.8 -> installed topkg.1.1.1 -> installed hmap.0.8.1 -> installed mtime.2.1.0 -> installed fmt.0.11.0 -> installed uutf.1.0.4 -> installed astring.0.8.5 -> installed logs.0.10.0 -> installed dune.3.23.1 -> installed afl-persistent.1.4 -> installed lwt-dllist.1.1.0 -> installed csexp.1.5.2 -> installed backoff.0.1.1 -> installed camlp-streams.5.0.1 -> installed cppo.1.8.0 -> installed cstruct.6.2.0 -> installed either.1.0.0 -> installed lintcstubs-arity.0.5.2 -> installed multicore-magic.2.3.2 -> installed ocaml-syntax-shims.1.0.0 -> installed ocaml-version.4.1.1 -> installed optint.0.3.0 -> installed oseq.0.5.1 -> installed psq.0.2.1 -> installed re.1.14.0 -> installed result.1.5 -> installed stdlib-shims.0.3.0 -> installed thread-table.1.0.0 -> installed tsort.2.2.0 -> installed yojson.3.0.0 -> installed crowbar.0.2.2 -> installed domain-local-timeout.1.0.1 -> installed domain-local-await.1.0.1 -> installed dune-configurator.3.23.1 -> installed alcotest.1.9.1 -> installed kcas.0.7.0 -> installed bigstringaf.0.10.0 -> installed iomux.0.4 -> installed mdx.2.5.2 -> installed containers.3.18 -> installed uring.2.14.0 -> installed dscheck.0.5.0 Done. <><> afl-persistent.1.4 installed successfully ><><><><><><><><><><><><><><><><> => afl-persistent is installed, but since the current OCaml compiler does not enable AFL instrumentation by default, most packages will not be instrumented and fuzzing with afl-fuzz may not be effective. To globally enable AFL instrumentation, create an OCaml switch like: opam switch create 5.4.1+afl ocaml-variants.5.4.1+options ocaml-option-afl # To update the current shell environment, run: eval $(opam env) 2026-06-09 09:13.56 ---> saved as "04513e0d533a5f7672112273cb826872a6693a26ecc8f0ff9ac86287661fd983" /src: (copy (src .) (dst /src)) 2026-06-09 09:13.59 ---> saved as "ace9dfd816438a17cfcf72014a5584d499d41b8aebc9477ed37f4fdd494da205" /src: (run (shell "opam exec -- dune build @install @check @runtest && rm -rf _build")) (cd _build/default/fuzz && ./fuzz_inherit_fds.exe) inherit_fds: PASS (cd _build/default/fuzz && ./fuzz_buf_read.exe) random ops: PASS (cd _build/default/fuzz && ./fuzz_buf_write.exe) random ops: PASS (cd _build/default/lib_eio_linux/tests && ./test.exe) Testing `eio_linux'. This run has ID `4J9RM9QQ'. [OK] io 0 copy. [OK] io 1 direct_copy. [OK] io 2 poll_add. [OK] io 3 poll_add_busy. [OK] io 4 iovec. [OK] io 5 no_sqe. [OK] io 6 read_exact. [OK] io 7 expose_backend. [OK] io 8 statx. [OK] io 9 signal_race. [OK] io 10 alloc-fixed-or-wait. Full test results in `/src/_build/default/lib_eio_linux/tests/_build/_tests/eio_linux'. Test Successful in 0.007s. 11 tests run. File "lib_eio_linux/tests/fd_sharing.md", line 1, characters 0-0: /usr/bin/git --no-pager diff --no-index --color=always -u _build/default/lib_eio_linux/tests/fd_sharing.md _build/default/lib_eio_linux/tests/.mdx/fd_sharing.md.corrected diff --git a/_build/default/lib_eio_linux/tests/fd_sharing.md b/_build/default/lib_eio_linux/tests/.mdx/fd_sharing.md.corrected index bf8230b..2c12233 100644 --- a/_build/default/lib_eio_linux/tests/fd_sharing.md +++ b/_build/default/lib_eio_linux/tests/.mdx/fd_sharing.md.corrected @@ -51,11 +51,5 @@ One domain closes an FD after another domain has enqueued a uring operation ment (* Allow the read to complete. *) Eio.Flow.close w );; -+Domain 1 enqueuing read on FD -+Waiting for domain 0... -+Domain 0 closing FD -+Domain 0 closed FD; waking domain 1 -+Domain 1 flushing queue -+Read EOF -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` File "tests/domains.md", line 1, characters 0-0: /usr/bin/git --no-pager diff --no-index --color=always -u _build/default/tests/domains.md _build/default/tests/.mdx/domains.md.corrected diff --git a/_build/default/tests/domains.md b/_build/default/tests/.mdx/domains.md.corrected index 886226d..7c9fae9 100644 --- a/_build/default/tests/domains.md +++ b/_build/default/tests/.mdx/domains.md.corrected @@ -53,10 +53,7 @@ Here, we use a mutex to check that the parent domain really did run while waitin traceln "Other fibers can still run"; Mutex.unlock mutex );; -+Spawning new domain... -+Other fibers can still run -+Got "Hello from new domain" from spawned domain -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Cancelling another domain: @@ -165,8 +162,7 @@ Cancelling a release handler across domains: traceln "Cancelled: %b" cancelled; raise Exit );; -+Cancelled: true -Exception: Stdlib.Exit. +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Can't fork into another domain: @@ -186,7 +182,7 @@ Can't fork into another domain: let sw = Promise.await p in Fiber.fork ~sw ignore; );; -Exception: Invalid_argument "Switch accessed from wrong domain!". +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` # Fiber-local storage @@ -200,6 +196,5 @@ domains (as the values may not be thread-safe): Fiber.with_binding key 123 @@ fun () -> Eio.Domain_manager.run mgr @@ fun () -> traceln "Key => %a" Fmt.(option ~none:(const string "<unset>") int) (Fiber.get key);; -+Key => <unset> -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` File "lib_eio_linux/tests/spawn.md", line 1, characters 0-0: /usr/bin/git --no-pager diff --no-index --color=always -u _build/default/lib_eio_linux/tests/spawn.md _build/default/lib_eio_linux/tests/.mdx/spawn.md.corrected diff --git a/_build/default/lib_eio_linux/tests/spawn.md b/_build/default/lib_eio_linux/tests/.mdx/spawn.md.corrected index 8d45211..1e55424 100644 --- a/_build/default/lib_eio_linux/tests/spawn.md +++ b/_build/default/lib_eio_linux/tests/.mdx/spawn.md.corrected @@ -37,8 +37,7 @@ Changing directory: ~env:(Unix.environment ()) ] in Promise.await (Process.exit_status child);; -/ -- : Unix.process_status = Unix.WEXITED 0 +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Changing directory using a file descriptor: @@ -61,8 +60,7 @@ Changing directory using a file descriptor: ~env:(Unix.environment ()) ] in Promise.await (Process.exit_status child);; -/ -- : Unix.process_status = Unix.WEXITED 0 +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Exit status: @@ -76,7 +74,7 @@ Exit status: ~env:(Unix.environment ()) ] in Promise.await (Process.exit_status child);; -- : Unix.process_status = Unix.WEXITED 1 +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Failure starting child: File "tests/mutex.md", line 1, characters 0-0: /usr/bin/git --no-pager diff --no-index --color=always -u _build/default/tests/mutex.md _build/default/tests/.mdx/mutex.md.corrected diff --git a/_build/default/tests/mutex.md b/_build/default/tests/.mdx/mutex.md.corrected index 47021db..548068c 100644 --- a/_build/default/tests/mutex.md +++ b/_build/default/tests/.mdx/mutex.md.corrected @@ -129,8 +129,7 @@ A failed critical section will poison the mutex: with Failure _ -> traceln "Trying to use the failed lock again fails:"; M.lock t;; -+Trying to use the failed lock again fails: -Exception: Eio__Eio_mutex.Poisoned (Failure "Simulated error"). +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` ## Protection @@ -166,11 +165,7 @@ Or allow interruption and disable the mutex: with ex -> traceln "Trying to reuse the failed mutex..."; M.use_ro t (fun () -> assert false);; -+Cancelling... -+Trying to reuse the failed mutex... -Exception: -Eio__Eio_mutex.Poisoned - (Eio__core__Exn.Cancelled (Failure "Simulated error")). +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Protection doesn't prevent cancellation while we're still waiting for the lock, though: @@ -186,9 +181,7 @@ Protection doesn't prevent cancellation while we're still waiting for the lock, with Failure _ -> M.unlock t; M.use_ro t (fun () -> traceln "Can reuse the mutex");; -+Cancelling... -+Can reuse the mutex -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Poisoning wakes any wakers: @@ -207,9 +200,7 @@ Poisoning wakes any wakers: with Failure _ -> () ) (fun () -> traceln "Waiting for lock..."; M.use_ro t (fun () -> assert false));; -+Waiting for lock... -+Poisoning mutex -Exception: Eio__Eio_mutex.Poisoned (Failure "Simulated error"). +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` @@ -248,9 +239,5 @@ If the resource isn't being mutated, we can just unlock on error: in Fiber.both fn fn; M.use_ro t (fun () -> traceln "Lock still works");; -+Entered critical section -+Failed to get lock -+Leaving critical section -+Lock still works -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` File "tests/flow.md", line 1, characters 0-0: /usr/bin/git --no-pager diff --no-index --color=always -u _build/default/tests/flow.md _build/default/tests/.mdx/flow.md.corrected diff --git a/_build/default/tests/flow.md b/_build/default/tests/.mdx/flow.md.corrected index 02b4061..4415f62 100644 --- a/_build/default/tests/flow.md +++ b/_build/default/tests/.mdx/flow.md.corrected @@ -61,11 +61,7 @@ Exception: End_of_file. let dst = Eio_mock.Flow.make "dst" in Eio_mock.Flow.on_read src [`Return "foo"; `Return "bar"]; Eio.Flow.copy src dst;; -+src: read "foo" -+dst: wrote "foo" -+src: read "bar" -+dst: wrote "bar" -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Copying from a string src: @@ -103,9 +99,7 @@ Copying from src using `Read_source_buffer`: Eio_mock.Flow.set_copy_method dst `Read_source_buffer; Eio_mock.Flow.on_copy_bytes dst [`Return 3; `Return 5]; Eio.Flow.copy src dst;; -+dst: wrote (rsb) ["foo"] -+dst: wrote (rsb) ["bar"] -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` ## read_all @@ -118,10 +112,7 @@ Copying from src using `Read_source_buffer`: traceln "Input length: %d\nOutput length: %d\nEqual: %b" (Cstruct.lenv data) (String.length got) (String.equal got (Cstruct.copyv data)); ;; -+Input length: 10240 -+Output length: 10240 -+Equal: true -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` ## write @@ -194,8 +185,7 @@ Sending a very long vector over a flow should just send it in chunks, not fail: traceln "Read %d bytes" (String.length got); assert (got = Cstruct.to_string (Cstruct.concat vecs)) ) -+Read 30000 bytes -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` ## Starvation @@ -217,6 +207,5 @@ Even if a fiber is already ready to run, we still perform IO from time to time: (fun () -> Eio.Flow.write w [Cstruct.of_string "msg"] ) -+Got "msg" -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` File "tests/sync.md", line 1, characters 0-0: /usr/bin/git --no-pager diff --no-index --color=always -u _build/default/tests/sync.md _build/default/tests/.mdx/sync.md.corrected diff --git a/_build/default/tests/sync.md b/_build/default/tests/.mdx/sync.md.corrected index d37b90f..6c1e47c 100644 --- a/_build/default/tests/sync.md +++ b/_build/default/tests/.mdx/sync.md.corrected @@ -33,11 +33,7 @@ Create a promise, fork a thread waiting for it, then fulfull it: Fiber.yield (); traceln "Thread after yield: %a" (pp_promise Fmt.string) thread; traceln "Final result: %s" (Promise.await_exn thread);; -+Initial state: unresolved -+After being fulfilled: fulfilled:ok -+Thread before yield: unresolved -+Thread after yield: fulfilled:ok -+Final result: ok +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Create a promise, fork a thread waiting for it, then break it: File "tests/time.md", line 1, characters 0-0: /usr/bin/git --no-pager diff --no-index --color=always -u _build/default/tests/time.md _build/default/tests/.mdx/time.md.corrected diff --git a/_build/default/tests/time.md b/_build/default/tests/.mdx/time.md.corrected index 63884c6..4b02423 100644 --- a/_build/default/tests/time.md +++ b/_build/default/tests/.mdx/time.md.corrected @@ -24,7 +24,7 @@ Check sleep works: Eio.Time.sleep clock 0.01; let t1 = Unix.gettimeofday () in assert (t1 -. t0 >= 0.01);; -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Cancelling sleep: @@ -34,7 +34,7 @@ Cancelling sleep: Fiber.both (fun () -> Eio.Time.sleep clock 1200.; assert false) (fun () -> failwith "Simulated cancel");; -Exception: Failure "Simulated cancel". +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Switch is already off: @@ -77,8 +77,7 @@ Check ordering works: traceln "Short timer finished"; failwith "Simulated cancel" );; -+Short timer finished -Exception: Failure "Simulated cancel". +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Check Unix debug clock: File "tests/stream.md", line 1, characters 0-0: /usr/bin/git --no-pager diff --no-index --color=always -u _build/default/tests/stream.md _build/default/tests/.mdx/stream.md.corrected diff --git a/_build/default/tests/stream.md b/_build/default/tests/.mdx/stream.md.corrected index c5a035e..3438d0e 100644 --- a/_build/default/tests/stream.md +++ b/_build/default/tests/.mdx/stream.md.corrected @@ -60,15 +60,7 @@ Readers have to wait when the stream is empty: Fiber.both (fun () -> take t; take t) (fun () -> add t 2);; -+Adding 1 to stream -+Added 1 to stream -+Reading from stream -+Got 1 from stream -+Reading from stream -+Adding 2 to stream -+Added 2 to stream -+Got 2 from stream -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Writers have to wait when the stream is full: @@ -89,23 +81,7 @@ Writers have to wait when the stream is full: take t; take t );; -+Adding 1 to stream -+Added 1 to stream -+Adding 2 to stream -+Added 2 to stream -+Adding 3 to stream -+Added 3 to stream -+Adding 4 to stream -+Reading from stream -+Got 1 from stream -+Reading from stream -+Got 2 from stream -+Reading from stream -+Got 3 from stream -+Reading from stream -+Got 4 from stream -+Added 4 to stream -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` A zero-length queue is synchronous: @@ -171,17 +147,7 @@ Cancel writing to a stream: take t; add t 3; take t;; -+Adding 1 to stream -+Added 1 to stream -+Adding 2 to stream -+Cancelled -+Reading from stream -+Got 1 from stream -+Adding 3 to stream -+Added 3 to stream -+Reading from stream -+Got 3 from stream -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Cancel writing to a zero-length stream: @@ -199,13 +165,7 @@ Cancel writing to a zero-length stream: Fiber.both (fun () -> add t 2) (fun () -> take t);; -+Adding 1 to stream -+Cancelled -+Adding 2 to stream -+Reading from stream -+Got 2 from stream -+Added 2 to stream -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Trying to use a stream with a cancelled context: File "tests/process.md", line 1, characters 0-0: /usr/bin/git --no-pager diff --no-index --color=always -u _build/default/tests/process.md _build/default/tests/.mdx/process.md.corrected diff --git a/_build/default/tests/process.md b/_build/default/tests/.mdx/process.md.corrected index 3a8483c..614f290 100644 --- a/_build/default/tests/process.md +++ b/_build/default/tests/.mdx/process.md.corrected @@ -83,8 +83,7 @@ Spawning subprocesses in new domains works normally: # run @@ fun mgr env -> Eio.Domain_manager.run env#domain_mgr @@ fun () -> Process.run mgr [ "echo"; "Hello from another domain" ];; -Hello from another domain -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Calling `await_exit` multiple times on the same spawn just returns the status: @@ -106,7 +105,7 @@ Using a sink that is not backed by a file descriptor: let buf = Buffer.create 16 in Eio.Process.run mgr ~stdout:(Flow.buffer_sink buf) [ "echo"; "Hello, world" ]; Buffer.contents buf -- : string = "Hello, world\n" +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Changing directory (unconfined): @@ -115,8 +114,7 @@ Changing directory (unconfined): # run @@ fun mgr env -> let root = env#fs / "/" in Process.run mgr ~cwd:root [ "env"; "pwd" ];; -/ -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Changing directory (confined): @@ -129,8 +127,7 @@ Changing directory (confined): Eio.Path.with_open_dir subdir @@ fun subdir -> Eio.Path.save (subdir / "test-cwd") "test-data" ~create:(`Exclusive 0o600); Process.run mgr ~cwd:subdir [ "cat"; "test-cwd" ];; -test-data -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Trying to access a path outside of the cwd: @@ -160,9 +157,7 @@ Exit code success can be determined by is_success (Process.run): # run @@ fun mgr env -> Process.run ~is_success:(Int.equal 3) mgr ["sh"; "-c"; "exit 0"];; -Exception: -Eio.Io Process Child_error Exited (code 0), - running command: sh -c "exit 0" +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Exit code success can be determined by is_success (Process.parse_out): @@ -170,7 +165,7 @@ Exit code success can be determined by is_success (Process.parse_out): ```ocaml # run @@ fun mgr env -> Process.parse_out ~is_success:(Int.equal 5) mgr Eio.Buf_read.line ["sh"; "-c"; "echo 123; exit 5"];; -- : string = "123" +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` The default environment: File "tests/network.md", line 1, characters 0-0: /usr/bin/git --no-pager diff --no-index --color=always -u _build/default/tests/network.md _build/default/tests/.mdx/network.md.corrected diff --git a/_build/default/tests/network.md b/_build/default/tests/.mdx/network.md.corrected index 4a3a8d8..89ea22f 100644 --- a/_build/default/tests/network.md +++ b/_build/default/tests/.mdx/network.md.corrected @@ -86,12 +86,7 @@ Handling one connection on a Unix domain socket: ```ocaml # run (test_address (`Unix "eio-test.sock"));; -+Connecting to server... -+Server accepted connection from client -+Server received: "Hello from client" -+Client received: "Bye" -+Client finished - cancelling server -Exception: Graceful_shutdown. +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Handling one connection on an abstract Unix domain socket (this only works on Linux): @@ -111,12 +106,7 @@ Handling one connection using IPv6: ```ocaml # run (test_address addr6);; -+Connecting to server... -+Server accepted connection from client -+Server received: "Hello from client" -+Client received: "Bye" -+Client finished - cancelling server -Exception: Graceful_shutdown. +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Cancelling the read: @@ -201,10 +191,7 @@ Handling one UDP packet using IPv6: ```ocaml # run (run_dgram Eio.Net.Ipaddr.V6.loopback);; -+Waiting to receive data on udp:[::1]:8082 -+Sending data from udp:[::1]:8081 to udp:[::1]:8082 -+Received message from udp:[::1]:8081: UDP Message -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Now test host-assigned addresses. @@ -244,10 +231,7 @@ Handling one UDP packet using IPv6: ```ocaml # let addr = Eio.Net.Ipaddr.V6.loopback in run @@ run_dgram2 addr ~e1:`UdpV6;; -+Waiting to receive data on udp:[::1]:8082 -+Sending data to udp:[::1]:8082 -+Received message UDP Message -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` It's not an error to close the socket before the handler returns: @@ -269,10 +253,7 @@ It's not an error to close the socket before the handler returns: let msg = Eio.Buf_read.(parse_exn take_all) flow ~max_size:100 in traceln "Client got %S" msg; );; -+Connecting to server... -+Server got connection -+Client got "Hi" -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` ## Unix interop File "README.md", line 1, characters 0-0: /usr/bin/git --no-pager diff --no-index --color=always -u _build/default/README.md _build/default/.mdx/README.md.corrected diff --git a/_build/default/README.md b/_build/default/.mdx/README.md.corrected index a13ece1..7b6fb8a 100644 --- a/_build/default/README.md +++ b/_build/default/.mdx/README.md.corrected @@ -167,8 +167,7 @@ For example, instead of giving `main` the real standard output, we can have it w let buffer = Buffer.create 20 in main (Eio.Flow.buffer_sink buffer); traceln "Main would print %S" (Buffer.contents buffer);; -+Main would print "Hello, world!\n" -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` [Eio.traceln][] provides convenient printf-style debugging, without requiring you to plumb `stderr` through your code. File "tests/fs.md", line 1, characters 0-0: /usr/bin/git --no-pager diff --no-index --color=always -u _build/default/tests/fs.md _build/default/tests/.mdx/fs.md.corrected diff --git a/_build/default/tests/fs.md b/_build/default/tests/.mdx/fs.md.corrected index 446874a..25141e5 100644 --- a/_build/default/tests/fs.md +++ b/_build/default/tests/.mdx/fs.md.corrected @@ -105,16 +105,14 @@ Creating a file and reading it back: let cwd = Eio.Stdenv.cwd env in Path.save ~create:(`Exclusive 0o666) (cwd / "test-file") "my-data"; traceln "Got %S" @@ Path.load (cwd / "test-file");; -+Got "my-data" -- : unit = () +Exception: Unix.Unix_error(Unix.ENOMEM, "io_uring_queue_init", "") ``` Check the file got the correct permissions (subject to the umask set above): ```ocaml # Printf.printf "Perm = %o\n" ((Unix.stat "test-file").st_perm);; -Perm = 644 -- : unit = () +Exception: Unix.Unix_error(Unix.ENOENT, "stat", "test-file") ``` # Sandboxing "/usr/bin/env" "bash" "-c" "opam exec -- dune build @install @check @runtest && rm -rf _build" failed with exit status 1 2026-06-09 09:14.08: Job failed: Failed: Build failed