Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"Assert_failure lib/multi_channel.ml:70:2" #115

Open
SGrondin opened this issue Jun 13, 2023 · 0 comments
Open

"Assert_failure lib/multi_channel.ml:70:2" #115

SGrondin opened this issue Jun 13, 2023 · 0 comments
Labels
bug Something isn't working

Comments

@SGrondin
Copy link

SGrondin commented Jun 13, 2023

First of all, thank you for the great library!

Fatal error: exception File "lib/multi_channel.ml", line 70, characters 2-8: Assertion failed
Raised at Stdlib__Domain.join in file "domain.ml", line 258, characters 16-24
Called from Eio__core__Fiber.fork.(fun) in file "lib_eio/core/fiber.ml", line 20, characters 10-14
Re-raised at Eio__core__Switch.maybe_raise_exs in file "lib_eio/core/switch.ml", line 116, characters 21-56
Called from Eio__core__Switch.run_internal in file "lib_eio/core/switch.ml", line 137, characters 4-21
Called from Eio__core__Cancel.with_cc in file "lib_eio/core/cancel.ml", line 116, characters 8-12
Re-raised at Eio__core__Cancel.with_cc in file "lib_eio/core/cancel.ml", line 118, characters 32-40
Called from Eio_posix__Sched.with_op in file "lib_eio_posix/sched.ml", line 300, characters 8-12
Re-raised at Eio_posix__Sched.with_op in file "lib_eio_posix/sched.ml", line 306, characters 4-12
Re-raised at Eio_posix__Sched.run.fork.(fun) in file "lib_eio_posix/sched.ml", line 321, characters 12-76
Called from Stdlib__Fun.protect in file "fun.ml", line 33, characters 8-15
Re-raised at Stdlib__Fun.protect in file "fun.ml", line 38, characters 6-52
Called from Eio_posix__Sched.run in file "lib_eio_posix/sched.ml", line 354, characters 4-217
Called from Eio_posix__Sched.with_sched in file "lib_eio_posix/sched.ml", line 244, characters 8-12
Re-raised at Eio_posix__Sched.with_sched in file "lib_eio_posix/sched.ml", line 249, characters 4-39
Called from Dune__exe__Strings in file "src/cli/strings.ml", line 26, characters 2-234

This exception occurs when code running in Eio.Domain_manager.run invokes Domainslib.Task.async.

The following code fails with an assertion error.

I'm using MacOS, OCaml 5.0.0, eio 0.10, eio_posix 0.10, domainslib 0.5.0. It also fails with the latest commit from Domainslib's main branch (14fe8fd6f0c46806efe46dfd1720a44a21edad2a).

open Eio.Std

(* Taken from Eio README.md *)
let pool = Domainslib.Task.setup_pool ~num_domains:2 ()

(* Taken from Eio README.md *)
let run_in_pool fn x =
  let result, set_result = Promise.create () in
  let (_ : unit Domainslib.Task.promise) =
    Domainslib.Task.async pool (fun () ->
      Promise.resolve set_result
      @@
      match fn x with
      | r -> Ok r
      | exception ex -> Error ex )
  in
  Promise.await_exn result

(* Minimal case *)
let () =
  Eio_main.run @@ fun env ->
  Switch.run @@ fun sw ->
  List.init 4 (fun _ -> ())
  |> Fiber.List.iter @@ fun () ->
     Fiber.fork ~sw @@ fun () -> Eio.Domain_manager.run env#domain_mgr @@ run_in_pool (fun () -> ())

The reason I'm even opening an issue is because I couldn't find anything in the docs of either Domainslib or Eio (or this guide) discouraging the above pattern.

It seems obvious enough of a pattern to me that my reaction was to think "I'm clearly doing something illegal". Is it a bug? Or just incomplete docs?

@kayceesrk kayceesrk added the bug Something isn't working label Jul 8, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants