Robustness
authormalc <av1474@comtv.ru>
Wed, 23 Jan 2013 06:51:19 +0000 (23 10:51 +0400)
committermalc <av1474@comtv.ru>
Wed, 23 Jan 2013 06:51:19 +0000 (23 10:51 +0400)
wsi.ml

diff --git a/wsi.ml b/wsi.ml
index 48cb3c8..f203b93 100644 (file)
--- a/wsi.ml
+++ b/wsi.ml
@@ -597,9 +597,13 @@ let syncsendwithrep sock secstowait s f =
   let now = Unix.gettimeofday in
   let deadline = now () +. secstowait in
   let rec readtillcompletion () =
-    let r, _, _ =
-      tempfailureretry (Unix.select [sock] [] []) (deadline -. now ())
+    let sf deadline =
+      let timeout = deadline -. now () in
+      if timeout <= 0.0
+      then [], [], []
+      else Unix.select [sock] [] [] timeout
     in
+    let r, _, _ = tempfailureretry sf deadline in
     match r with
     | [] -> error "didn't get X response in %f seconds, aborting" secstowait
     | _ ->