package hack_parallel
Parallel and shared memory library
Install
Dune Dependency
Authors
Maintainers
Sources
1.0.1.tar.gz
md5=ba7c72bc207e326b72e294fc76f6ad2c
sha512=5020d47f97bea2f88e2a40411894d03232a7f2282606926c93c7d4c96d72e94a966be852897a9b16f7e0893ba376512045abb9d93020a7c03c3def4f3d918f8e
doc/src/hack_parallel.utils/fork.ml.html
Source file fork.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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
(** * Copyright (c) 2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the "hack" directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * *) open Hack_core (* Forking duplicates data in all buffers, so we flush them beforehand to avoid * writing the same thing twice. * * Note: by default, this only clears ocaml's internal buffers (via flush_all). * If your process has its own buffers in the program state, those must be * cleared by registering a callback with `on_fork` below to reliably avoid * writing those buffers twice as well. *) let pre_fork_callbacks : (unit -> unit) list ref = ref [flush_all] (** Sometimes it is more convenient to clear buffers in the children (to * avoid the double writing of data) instead of the parent on a successful * fork. We store those callbacks here. *) let post_fork_child_callbacks : (unit -> unit) list ref = ref [] let on_fork f = pre_fork_callbacks := f :: !pre_fork_callbacks let post_fork_child f = post_fork_child_callbacks := f :: !post_fork_child_callbacks (* You should always use this instead of Unix.fork, so that the callbacks get * invoked *) let fork () = List.iter !pre_fork_callbacks ~f:(fun f -> f()); match Unix.fork () with | 0 -> List.iter !post_fork_child_callbacks ~f:(fun f -> f()); 0 | i -> i (* should only be called from hh_server, which initializes the PidLog *) let fork_and_log ?reason () = let result = fork() in (match result with | -1 -> () | 0 -> PidLog.close (); | pid -> PidLog.log ?reason pid); result let fork_and_may_log ?reason () = match reason with | None -> fork () | Some _ -> fork_and_log ?reason ()
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>