[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2/3] 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 <rob.hoes@xxxxxxxxxx> --- tools/ocaml/libs/xl/xenlight.mli.in | 2 +- tools/ocaml/libs/xl/xenlight_stubs.c | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/tools/ocaml/libs/xl/xenlight.mli.in b/tools/ocaml/libs/xl/xenlight.mli.in index 794dbf1..b9819e1 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 a61c222..2e2606a 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); -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |