From b80929774af5a0aaa2ec80dc03638e1d34166593 Mon Sep 17 00:00:00 2001 From: Jeremie Dimino Date: Wed, 7 Dec 2016 17:05:53 +0100 Subject: [PATCH] fix --- src/future.ml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/future.ml b/src/future.ml index 5e903a29..c843656d 100644 --- a/src/future.ml +++ b/src/future.ml @@ -88,12 +88,15 @@ let ( >>= ) t f = let ( >>| ) t f = t >>= fun x -> return (f x) let with_exn_handler f ~handler = - protectx !exn_handler - ~finally:(fun saved -> - exn_handler := saved) - ~f:(fun _ -> - exn_handler := handler; - f ()) + let saved = !exn_handler in + exn_handler := handler; + match f () with + | x -> exn_handler := saved; x + | exception exn -> + let bt = Printexc.get_raw_backtrace () in + exn_handler := saved; + handler exn bt; + reraise exn let both a b = a >>= fun a ->