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
let rec run t =
Lwt.wakeup_paused ();
match Lwt.poll t with
| Some x -> x
| None ->
Mirage_runtime.run_enter_iter_hooks ();
Lwt_engine.iter (Lwt.paused_count () = 0);
Lwt.wakeup_paused ();
Mirage_runtime.run_leave_iter_hooks ();
run t
let ignore_sigpipe () =
try Sys.(set_signal sigpipe Signal_ignore) with Invalid_argument _ -> ()
let run t =
ignore_sigpipe ();
run t
let () =
at_exit (fun () ->
Lwt.abandon_wakeups ();
run (Mirage_runtime.run_exit_hooks ()))