Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
riot.ml1 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 49include Runtime include Lib let shutdown () = Logger.debug (fun f -> f "RIOT IS SHUTTING DOWN!"); let pool = _get_pool () in Scheduler.Pool.shutdown pool let run ?(rnd = Random.State.make_self_init ()) ?workers main = let max_workers = Int.max 0 (Stdlib.Domain.recommended_domain_count () - 2) in let workers = match workers with Some w -> Int.min w max_workers | None -> max_workers in Log.debug (fun f -> f "Initializing Riot runtime..."); Printexc.record_backtrace true; Pid.reset (); Scheduler.Uid.reset (); let sch0 = Scheduler.make ~rnd () in let pool, domains = Scheduler.Pool.make ~main:sch0 ~domains:workers () in Scheduler.set_current_scheduler sch0; Scheduler.Pool.set_pool pool; let _pid = _spawn ~shutdown:true pool sch0 main in Scheduler.run pool sch0 (); Log.debug (fun f -> f "Riot runtime shutting down..."); List.iter Stdlib.Domain.join domains; Log.debug (fun f -> f "Riot runtime shutdown") let start ?rnd ?workers ~apps () = run ?rnd ?workers @@ fun () -> let pids = List.fold_left (fun acc (module App : Application.Intf) -> match (acc, App.start ()) with | Ok acc, Ok pid -> Ok (pid :: acc) | Ok _, Error error -> Logger.error (fun f -> f "Could not start application %s due to %s" App.name (Marshal.to_string error [])); Error () | Error (), _ -> acc) (Ok []) apps |> Result.get_ok in wait_pids pids