[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen master] libxl: ocaml: use int64 for timeval fields in the timeout_register callback



commit 56e43525ddc20aeda309ac19ac1104a1b171cb16
Author:     Rob Hoes <rob.hoes@xxxxxxxxxx>
AuthorDate: Thu Dec 12 16:36:50 2013 +0000
Commit:     Ian Campbell <ian.campbell@xxxxxxxxxx>
CommitDate: Wed Jan 8 14:11:17 2014 +0000

    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>
    Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
    Acked-by: Ian Campbell <ian.campbell@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);
--
generated by git-patchbot for /home/xen/git/xen.git#master

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

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