Skip to content

Commit 8a9e6b3

Browse files
committed
Lib: better error handling in async
1 parent 3daf1d9 commit 8a9e6b3

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

lib/async/async_js.ml

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,25 @@ let run =
6464
| State.Idle -> run_after 0.; state := State.Will_run_soon
6565
| State.Running | State.Will_run_soon -> ()
6666

67+
let log name exn =
68+
let exn =
69+
match Async_kernel.Monitor.extract_exn exn with
70+
| Js.Error err -> `Js err
71+
| exn -> `Exn exn
72+
in
73+
match exn with
74+
| `Js err -> Firebug.console##error_2 (Js.string name, err);
75+
| `Exn exn -> Firebug.console##error_2 (Js.string name, Js.string (Exn.to_string exn));
76+
| `Js_and_exn (exn,err) -> Firebug.console##error_3 (Js.string name, Js.string (Exn.to_string exn), err)
77+
6778
let initialization = lazy (
6879
let t = Scheduler.t () in
6980
Scheduler.set_job_queued_hook t (fun _ -> run ());
7081
Scheduler.set_event_added_hook t (fun _ -> run ());
7182
Scheduler.set_thread_safe_external_job_hook t run;
72-
Async_kernel.Monitor0.try_with_log_exn := (fun exn ->
73-
Firebug.console##error_2 (
74-
Js.string "Async_kernel.Monitor0.try_with_log_exn",
75-
exn));
83+
Async_kernel.Monitor0.try_with_log_exn := log "Async_kernel: Monitor.try_with";
84+
Async_kernel.Monitor.detach_and_iter_errors
85+
Async_kernel.Monitor.main ~f:(log "Async_kernel: Unhandled exception");
7686
run ()
7787
)
7888

0 commit comments

Comments
 (0)