|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH for-4.6 12/13] tools/ocaml: call libxl_dominfo_{init, dispose} in stub
On 23/07/2015 08:59, Wei Liu wrote:
> Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
> ---
> Cc: David Scott <dave.scott@xxxxxxxxxxxxx>
>
> As far as I can tell, all Val_$foo function does deep-copy, so we can
> safely call dispose in said function.
Sadly this is insufficient. failwith_xl() longjump()s back into the
ocaml runtime, which ends up leaking any allocations made for dominfo.
This is a systemic problem with the Ocaml bindings and I have a proposed
solution but it involves rewriting quite a lot of this code and is
definitely not 4.6 material.
~Andrew
> ---
> tools/ocaml/libs/xl/xenlight_stubs.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/tools/ocaml/libs/xl/xenlight_stubs.c
> b/tools/ocaml/libs/xl/xenlight_stubs.c
> index 4133527..7b8d6db 100644
> --- a/tools/ocaml/libs/xl/xenlight_stubs.c
> +++ b/tools/ocaml/libs/xl/xenlight_stubs.c
> @@ -979,14 +979,18 @@ value stub_xl_dominfo_get(value ctx, value domid)
> int ret;
> uint32_t c_domid = Int_val(domid);
>
> + libxl_dominfo_init(&c_dominfo);
> +
> caml_enter_blocking_section();
> ret = libxl_domain_info(CTX, &c_dominfo, c_domid);
> caml_leave_blocking_section();
>
> - if (ret != 0)
> + if (ret != 0) {
> failwith_xl(ERROR_FAIL, "domain_info");
> + libxl_dominfo_dispose(&c_dominfo);
> + }
> dominfo = Val_dominfo(&c_dominfo);
> -
> + libxl_dominfo_dispose(&c_dominfo);
> CAMLreturn(dominfo);
> }
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |