From: Jérémie D. <Ba...@us...> - 2010-05-20 20:42:33
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via e4676289e7990e6c6a086cf1597d4faf40df304f (commit) from f8f0962c983e01f45754512fef21d92a6f72a32a (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit e4676289e7990e6c6a086cf1597d4faf40df304f Author: Jérémie Dimino <je...@di...> Date: Thu May 20 22:37:44 2010 +0200 better handling of driver exit ----------------------------------------------------------------------- Changes: diff --git a/info/control/driver/driver.ml b/info/control/driver/driver.ml index 2a3320d..08a8f59 100644 --- a/info/control/driver/driver.ml +++ b/info/control/driver/driver.ml @@ -16,6 +16,8 @@ open Lwt module String_map = Map.Make(String) +let quit = ref false + (* +-----------------------------------------------------------------+ | Cards | +-----------------------------------------------------------------+ *) @@ -103,15 +105,21 @@ let poll card ?(update_delay=Config.update_delay) initial get = lwt x = get usb_card in set_value x; return () - with exn -> - lwt () = Lwt_log.error_f ~section ~exn "reading from card %s failed with" card.card_name in - return () + with + | USBCard.Card_closed when !quit -> + return () + | exn -> + lwt () = Lwt_log.error_f ~section ~exn "reading from card %s failed with" card.card_name in + return () end | None -> return () in lwt () = Lwt_unix.sleep update_delay in - loop () + if !quit then + return () + else + loop () in ignore (loop ()); value @@ -1125,7 +1133,6 @@ end +-----------------------------------------------------------------+ *) let done_waiter, done_wakener = Lwt.wait () -let quit = ref false module Manager = struct @@ -1142,13 +1149,16 @@ struct let shutdown ctx manager = lwt () = Lwt_log.info ~section "exiting" in quit := true; - lwt () = close card_interface - and () = close card_sensor - and () = close card_motor - and () = close card_monitoring in - lwt _ = OBus_bus.release_name (OBus_context.connection ctx) "fr.krobot.Driver" in - Lwt.wakeup done_wakener (); - return () + try_lwt + lwt () = close card_interface + and () = close card_sensor + and () = close card_motor + and () = close card_monitoring in + lwt _ = OBus_bus.release_name (OBus_context.connection ctx) "fr.krobot.Driver" in + return () + finally + Lwt.wakeup done_wakener (); + return () let services_status = React.S.map @@ -1283,7 +1293,7 @@ let rec monitor_card ~name ~vendor_id ~product_id ~set on_up on_down = lwt () = Lwt_log.info_f ~section "%s card is up and running" name in set (Some card); lwt () = on_up card in - lwt result = USBCard.watch card in + lwt result = try_lwt USBCard.watch card with exn -> return (`Error exn) in set None; lwt () = on_down () in lwt () = @@ -1318,7 +1328,7 @@ let rec monitor_rx64 ~name ~path ~rate ~set on_up on_down = lwt () = Lwt_log.info_f ~section "%s card is up and running" name in set (Some card); lwt () = on_up card in - lwt result = RX64Card.watch card in + lwt result = try_lwt RX64Card.watch card with exn -> return (`Error exn) in set None; lwt () = on_down () in lwt () = hooks/post-receive -- krobot |