package eio

  1. Overview
  2. Docs
Effect-based direct-style IO API for OCaml

Install

dune-project
 Dependency

Authors

Maintainers

Sources

eio-1.4.tbz
sha256=ba11ad486f492130dbb486f2b3bdc4905643f10016806ddf86e9a34e4346aaa5
sha512=57ef2c137ccdc26d8029e636b6a4ee92da7c6b2f35954946bd56ca595d6947a8ec42f6f83f8552f73d6719e6ce2314cae2e2fad1686a387522935e6f90e9a8d9

doc/src/eio.mock/domain_manager.ml.html

Source file domain_manager.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
open Eio.Std

let id = Fiber.create_key ()

let with_domain_tracing fn =
  Eio.Debug.with_trace_prefix (fun f ->
      Fiber.get id |> Option.iter (fun id -> Fmt.pf f "[%s] " id)
    ) fn

module Fake_domain_mgr = struct
  type t = {
    mutable next_domain_id : int;
  }

  let create () = { next_domain_id = 1 }

  let run t fn =
    let self = t.next_domain_id in
    t.next_domain_id <- t.next_domain_id + 1;
    let cancelled, _ = Promise.create () in
    Fiber.with_binding id (string_of_int self)
      (fun () -> fn ~cancelled)

  let run_raw t fn =
    let self = t.next_domain_id in
    t.next_domain_id <- t.next_domain_id + 1;
    Fiber.with_binding id (string_of_int self) fn
end

let create =
  let handler = Eio.Domain_manager.Pi.mgr (module Fake_domain_mgr) in
  fun () -> Eio.Resource.T (Fake_domain_mgr.create (), handler)

let run fn =
  let dm = create () in
  with_domain_tracing @@ fun () ->
  Fiber.with_binding id "0" @@ fun () ->
  fn dm