X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=virt-top%2Fvirt_top_main.ml;h=e8c4425c3754a6665eef67e0ea1412daa6cba668;hb=4a2d0ccd91f07d0a2009e8553a29fcf4cf752ba3;hp=cb3486ee5152729629335ccf14a0161ee4632807;hpb=757832f0f789d30abcad040216bd8a69e25842d5;p=virt-top.git diff --git a/virt-top/virt_top_main.ml b/virt-top/virt_top_main.ml index cb3486e..e8c4425 100644 --- a/virt-top/virt_top_main.ml +++ b/virt-top/virt_top_main.ml @@ -1,5 +1,5 @@ (* 'top'-like tool for libvirt domains. - (C) Copyright 2007 Richard W.M. Jones, Red Hat Inc. + (C) Copyright 2007-2009 Richard W.M. Jones, Red Hat Inc. http://libvirt.org/ This program is free software; you can redistribute it and/or modify @@ -21,6 +21,7 @@ open Curses +open Virt_top_gettext.Gettext open Virt_top (* Note: make sure we catch any exceptions and clean up the display. @@ -29,24 +30,43 @@ open Virt_top * that all allocated resources are being counted properly (by running * the program under --debug ...). *) -let error = - let 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 main_loop setup; - if !script_mode then endwin (); - false + if not script_mode && not stream_mode then endwin (); + Gc.compact (); + exit 0 with | Libvirt.Virterror err -> - endwin (); + if not script_mode && not stream_mode then endwin (); prerr_endline (Libvirt.Virterror.to_string err); - true + Printexc.print_backtrace stderr; + 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 -> - endwin (); - prerr_endline ("Error: " ^ Printexc.to_string exn); - true - -let () = - Gc.compact (); (* See note above. *) - - exit (if error then 1 else 0) + if not script_mode && not stream_mode then endwin (); + prerr_endline (s_ "Error" ^ ": " ^ Printexc.to_string exn); + Printexc.print_backtrace stderr; + Gc.compact (); + exit 1