package eio

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

Install

Dune Dependency

Authors

Maintainers

Sources

eio-1.2.tbz
sha256=3792e912bd8d494bb2e38f73081825e4d212b1970cf2c1f1b2966caa9fd6bc40
sha512=4a80dbcf8cf2663bdad0f2970871844f37bd293c56bd1ce602910e0a613754945f1f942719f9630906453be7c73c1732dc97526c6c90b0b36100d04fd5e871e4

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
OCaml

Innovation. Community. Security.