From 262e57e7c23493f38daa6a72761c813d1fe7a8f1 Mon Sep 17 00:00:00 2001 From: "Christoph M. Wintersteiger" Date: Wed, 31 Jul 2024 16:57:03 +0100 Subject: [PATCH] Use IO.catch in async --- src/server.ml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/server.ml b/src/server.ml index 390960b8..bc808733 100644 --- a/src/server.ml +++ b/src/server.ml @@ -76,10 +76,14 @@ module Make (IO : IO) = struct end let async (self : #base_server) f : unit IO.t = - self#spawn_query_handler - (fun () -> try f () with err -> - Log.err (fun k -> k "LSP async notification handler failed: %s" (Printexc.to_string err)); - IO.return ()); + self#spawn_query_handler (fun () -> + IO.catch f (fun exn bt -> + let msg = + spf "LSP async notification handler failed with %s\n%s" + (Printexc.to_string exn) + (Printexc.raw_backtrace_to_string bt) + in + IO.return @@ Log.err (fun k -> k "%s" msg))); IO.return () (** A wrapper to more easily reply to notifications *)