package async_kernel

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file async_gc.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
open Core_kernel
include Gc

(** [add_finalizer f x] is like [Gc.finalise f x], except that the finalizer is guaranteed
    to run as an Async job (i.e. without interrupting other Async jobs).  Unprotected use
    of [Caml.Gc.finalise] or [Core.Gc.add_finalizer] in Async programs is wrong, because
    the finalizers won't hold the async lock, and thus could interleave arbitrarily with
    async jobs. *)
let add_finalizer heap_block f = Scheduler.(add_finalizer (t ())) heap_block f

let add_finalizer_exn heap_block f = Scheduler.(add_finalizer_exn (t ())) heap_block f
let add_finalizer_last heap_block f = Scheduler.(add_finalizer_last (t ())) heap_block f

let add_finalizer_last_exn heap_block f =
  Scheduler.(add_finalizer_last_exn (t ())) heap_block f
;;

module Alarm = struct
  module Alarm = Gc.Expert.Alarm

  type t = Alarm.t [@@deriving sexp_of]

  let create f = Scheduler.(create_alarm (t ())) f
  let delete = Alarm.delete
end
OCaml

Innovation. Community. Security.