diff --git a/src/picos/nanoev_picos.ml b/src/picos/nanoev_picos.ml index 414bf38..a11c89f 100644 --- a/src/picos/nanoev_picos.ml +++ b/src/picos/nanoev_picos.ml @@ -85,48 +85,42 @@ let[@inline] unwrap_ = function | None -> () | Some (exn, bt) -> Printexc.raise_with_backtrace exn bt -let retry_read_ fd f = - let ev = get_loop_exn_ () in - let[@unroll 1] rec loop () = - match f () with - | res -> res - | exception - Unix.Unix_error ((Unix.EAGAIN | Unix.EWOULDBLOCK | Unix.EINTR), _, _) -> - Trace_.message "read must wait"; - let trigger = Picos.Trigger.create () in - let closed_r = ref false in - Nanoev.on_readable ev fd trigger closed_r (fun ~closed trigger closed_r -> - closed_r := closed; - Picos.Trigger.signal trigger); - Picos.Trigger.await trigger |> unwrap_; - if !closed_r then raise Closed; - loop () - in - loop () +let[@unroll 1] rec retry_read_ fd f = + match f () with + | res -> res + | exception + Unix.Unix_error ((Unix.EAGAIN | Unix.EWOULDBLOCK | Unix.EINTR), _, _) -> + (* Trace_.message "read must wait"; *) + let trigger = Picos.Trigger.create () in + let closed_r = ref false in + let ev = get_loop_exn_ () in + Nanoev.on_readable ev fd trigger closed_r (fun ~closed trigger closed_r -> + closed_r := closed; + Picos.Trigger.signal trigger); + Picos.Trigger.await trigger |> unwrap_; + if !closed_r then raise Closed; + retry_read_ fd f -let retry_write_ fd f = - let ev = get_loop_exn_ () in - let rec loop () = - match f () with - | res -> res - | exception - Unix.Unix_error ((Unix.EAGAIN | Unix.EWOULDBLOCK | Unix.EINTR), _, _) -> - Trace_.message "write must wait"; - let trigger = Picos.Trigger.create () in - let closed_r = ref false in - Nanoev.on_writable ev fd trigger closed_r (fun ~closed trigger closed_r -> - closed_r := closed; - Picos.Trigger.signal trigger); - Picos.Trigger.await trigger |> unwrap_; - if !closed_r then raise Closed; - loop () - in - loop () +let[@unroll 1] rec retry_write_ fd f = + match f () with + | res -> res + | exception + Unix.Unix_error ((Unix.EAGAIN | Unix.EWOULDBLOCK | Unix.EINTR), _, _) -> + (* Trace_.message "write must wait"; *) + let ev = get_loop_exn_ () in + let trigger = Picos.Trigger.create () in + let closed_r = ref false in + Nanoev.on_writable ev fd trigger closed_r (fun ~closed trigger closed_r -> + closed_r := closed; + Picos.Trigger.signal trigger); + Picos.Trigger.await trigger |> unwrap_; + if !closed_r then raise Closed; + retry_write_ fd f let read fd buf i len : int = try retry_read_ fd (fun () -> - Trace_.message "read"; + (* Trace_.message "read"; *) Unix.read fd buf i len) with Closed -> 0 @@ -138,7 +132,7 @@ let close fd = let accept fd = try retry_read_ fd (fun () -> - Trace_.message "accept"; + (* Trace_.message "accept"; *) Unix.accept fd) with Unix.Unix_error ((Unix.ESHUTDOWN | Unix.ECONNABORTED), _, _) -> raise Closed @@ -146,7 +140,7 @@ let accept fd = let write fd buf i len : int = try retry_write_ fd (fun () -> - Trace_.message "write"; + (* Trace_.message "write"; *) Unix.write fd buf i len) with Closed -> 0