Skip to content

Commit 2109996

Browse files
committed
runner: Use floats for times to be compatible with 32 bits
Unix.time () does not fit inside a 31-bit int (which must be why it is using float in the first place), so use floats for times
1 parent 724a043 commit 2109996

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

tools/runner.ml

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -116,25 +116,26 @@ let pp_status_win fmt cmd status =
116116
status = WEXITED 0
117117

118118
let 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

121121
let 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

128128
let 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

139140
let 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

Comments
 (0)