From c80ca275bd9cdbd52e372612fa741789e845c482 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Fri, 28 Sep 2012 16:37:50 +0100 Subject: [PATCH] Make the main code and exception handling simpler. --- virt-top/virt_top_main.ml | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/virt-top/virt_top_main.ml b/virt-top/virt_top_main.ml index bd9b575..e8c4425 100644 --- a/virt-top/virt_top_main.ml +++ b/virt-top/virt_top_main.ml @@ -30,27 +30,43 @@ open Virt_top * that all allocated resources are being counted properly (by running * the program under --debug ...). *) -let error = - let ((_, _, script_mode, _, stream_mode, _, _, _) as setup) = start_up () in +let () = Printexc.record_backtrace true + +let ((_, _, script_mode, _, stream_mode, _, _, _) as setup) = + try start_up () + with + | Failure msg -> + prerr_endline msg; + Printexc.print_backtrace stderr; + exit 1 + | exn -> + prerr_endline (s_ "Error" ^ ": " ^ Printexc.to_string exn); + Printexc.print_backtrace stderr; + exit 1 + +let () = try - Printexc.record_backtrace true; main_loop setup; if not script_mode && not stream_mode then endwin (); - false + Gc.compact (); + exit 0 with | Libvirt.Virterror err -> if not script_mode && not stream_mode then endwin (); prerr_endline (Libvirt.Virterror.to_string err); Printexc.print_backtrace stderr; - true + Gc.compact (); + exit 1 + | Failure msg -> + if not script_mode && not stream_mode then endwin (); + prerr_endline msg; + Printexc.print_backtrace stderr; + Gc.compact (); + exit 1 | exn -> if not script_mode && not stream_mode then endwin (); prerr_endline (s_ "Error" ^ ": " ^ Printexc.to_string exn); Printexc.print_backtrace stderr; - true - -let () = - Gc.compact (); (* See note above. *) - - exit (if error then 1 else 0) + Gc.compact (); + exit 1 -- 1.8.3.1