[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v2 10/17] tools/ocaml/libs/mmap: allocate correct number of bytes
OCaml memory allocation functions use words as units, unless explicitly documented otherwise. Thus we were allocating more memory than necessary, caml_alloc should've been called with the parameter '2', but was called with a lot more. To account for future changes in the struct keep using sizeof, but round up and convert to number of words. For OCaml 1 word = sizeof(value) The Wsize_bsize macro converts bytes to words. Signed-off-by: Edwin Török <edvin.torok@xxxxxxxxxx> --- tools/ocaml/libs/mmap/xenmmap_stubs.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/ocaml/libs/mmap/xenmmap_stubs.c b/tools/ocaml/libs/mmap/xenmmap_stubs.c index b811990a89..4d09c5a6e6 100644 --- a/tools/ocaml/libs/mmap/xenmmap_stubs.c +++ b/tools/ocaml/libs/mmap/xenmmap_stubs.c @@ -28,6 +28,8 @@ #include <caml/fail.h> #include <caml/callback.h> +#define Wsize_bsize_round(n) (Wsize_bsize( (n) + sizeof(value) - 1 )) + static int mmap_interface_init(struct mmap_interface *intf, int fd, int pflag, int mflag, int len, int offset) @@ -57,7 +59,7 @@ CAMLprim value stub_mmap_init(value fd, value pflag, value mflag, default: caml_invalid_argument("maptype"); } - result = caml_alloc(sizeof(struct mmap_interface), Abstract_tag); + result = caml_alloc(Wsize_bsize_round(sizeof(struct mmap_interface)), Abstract_tag); if (mmap_interface_init(Intf_val(result), Int_val(fd), c_pflag, c_mflag, -- 2.25.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |