@@ -116,25 +116,26 @@ let pp_status_win fmt cmd status =
116116 status = WEXITED 0
117117
118118let pp_status = if Sys. win32 then pp_status_win else pp_status_unix
119- let start_time = int_of_float ( Unix. time () )
119+ let start_time = Unix. time ()
120120
121121let deadline =
122- let getint v = Option. bind (Sys. getenv_opt v) int_of_string_opt in
123- let global = Option. value ~default: max_int (getint " DEADLINE" ) in
124- match getint " TEST_TIMEOUT" with
122+ let getfloat v = Option. bind (Sys. getenv_opt v) float_of_string_opt in
123+ let global = Option. value ~default: Float. infinity (getfloat " DEADLINE" ) in
124+ match getfloat " TEST_TIMEOUT" with
125125 | None -> global
126- | Some t -> min global (start_time + (t * 60 ))
126+ | Some t -> min global (start_time +. (t *. 60. ))
127127
128128let deadline_watcher pid () =
129129 let open Unix in
130130 assert (deadline > start_time);
131- sleep (deadline - start_time);
132- Atomic. set timed_out true ;
133- if not Sys. win32 then (
134- (* let's give it a little time to stop *)
135- kill pid Sys. sigterm;
136- sleep 2 );
137- kill pid Sys. sigkill
131+ if Float. is_finite deadline then (
132+ sleepf (deadline -. start_time);
133+ Atomic. set timed_out true ;
134+ if not Sys. win32 then (
135+ (* let's give it a little time to stop *)
136+ kill pid Sys. sigterm;
137+ sleep 2 );
138+ kill pid Sys. sigkill)
138139
139140let log_time cmd =
140141 match Sys. getenv_opt " TIMELOGDIR" with
@@ -143,7 +144,7 @@ let log_time cmd =
143144 let f = Filename. concat d " times.log" in
144145 let flags = [ Open_wronly ; Open_append ; Open_creat ; Open_binary ] in
145146 Out_channel. with_open_gen flags 0o666 f @@ fun oc ->
146- let dur = int_of_float (Unix. time () ) - start_time in
147+ let dur = int_of_float (Unix. time () -. start_time) in
147148 let hours = dur / 3600
148149 and minutes = dur mod 3600 / 60
149150 and seconds = dur mod 60 in
0 commit comments