[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.