From: Rob Hoes Date: Thu, 12 Dec 2013 16:36:50 +0000 (+0000) Subject: libxl: ocaml: use int64 for timeval fields in the timeout_register callback X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~5684 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=56e43525ddc20aeda309ac19ac1104a1b171cb16;p=xen.git libxl: ocaml: use int64 for timeval fields in the timeout_register callback 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 Acked-by: Ian Jackson Acked-by: Ian Campbell --- diff --git a/tools/ocaml/libs/xl/xenlight.mli.in b/tools/ocaml/libs/xl/xenlight.mli.in index 794dbf1aa6..b9819e12ae 100644 --- a/tools/ocaml/libs/xl/xenlight.mli.in +++ b/tools/ocaml/libs/xl/xenlight.mli.in @@ -71,7 +71,7 @@ module Async : sig 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 diff --git a/tools/ocaml/libs/xl/xenlight_stubs.c b/tools/ocaml/libs/xl/xenlight_stubs.c index a61c22263b..2e2606a539 100644 --- a/tools/ocaml/libs/xl/xenlight_stubs.c +++ b/tools/ocaml/libs/xl/xenlight_stubs.c @@ -1286,6 +1286,7 @@ int timeout_register(void *user, void **for_app_registration_out, { caml_leave_blocking_section(); CAMLparam0(); + CAMLlocal2(sec, usec); CAMLlocalN(args, 4); static value *func = NULL; value *p = (value *) user; @@ -1295,9 +1296,12 @@ int timeout_register(void *user, void **for_app_registration_out, 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);