The original code works fine on 64-bit, but on 32-bit, the OCaml int (which is
1 bit smaller than the C int) is likely to overflow.
Signed-off-by: Rob Hoes <rob.hoes@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
fd_register:('a -> Unix.file_descr -> event list -> for_libxl -> unit) ->
fd_modify:('a -> Unix.file_descr -> event list -> unit) ->
fd_deregister:('a -> Unix.file_descr -> unit) ->
- timeout_register:('a -> int -> int -> for_libxl -> unit) ->
+ timeout_register:('a -> int64 -> int64 -> for_libxl -> unit) ->
timeout_modify:('a -> unit) ->
osevent_hooks
{
caml_leave_blocking_section();
CAMLparam0();
+ CAMLlocal2(sec, usec);
CAMLlocalN(args, 4);
static value *func = NULL;
value *p = (value *) user;
func = caml_named_value("libxl_timeout_register");
}
+ sec = caml_copy_int64(abs.tv_sec);
+ usec = caml_copy_int64(abs.tv_usec);
+
args[0] = *p;
- args[1] = Val_int(abs.tv_sec);
- args[2] = Val_int(abs.tv_usec);
+ args[1] = sec;
+ args[2] = usec;
args[3] = (value) for_libxl;
caml_callbackN(*func, 4, args);