[Libguestfs] [PATCH 1/4] v2v: domainxml: factor out connect and pool loading

Pino Toscano ptoscano at redhat.com
Tue Apr 14 17:04:57 UTC 2015


On Tuesday 14 April 2015 17:26:19 Richard W.M. Jones wrote:
> On Tue, Apr 14, 2015 at 05:14:50PM +0100, Richard W.M. Jones wrote:
> > As a result of this I'm always suspicious of code that calls
> > String_val, stashes the result in a variable, and then uses the result
> > over long stretches of code.  It's safer to call String_val() multiple
> > times whenever it is needed (String_val is a no-op because
> > value == char * for OCaml strings).

This is something I checked, although of course avoid being on the
"borderline" is better indeed.

> And another thing to say is if you want to pass a 'value' into other
> private functions, in order to avoid having to call String_val() until
> the last moment, then you usually need to surround those private
> functions with:
> 
>   static value internal_fn (value a)
>   {
>     CAMLparam1 (a);
>     // maybe also CAMLlocal (..);
> 
>     ...
> 
>     CAMLreturn (Val_unit);
>       // or CAMLreturnT if returning a non-value
>       // or CAMLreturn0 if returning void
>   }
> 
> These are only needed for functions that may allocate on the OCaml
> stack, eg. calling caml_alloc*, caml_copy*, etc (perhaps indirectly).
> 
> What these macros actually do is to set up a struct on the stack which
> is linked to a global list of stack frames.  If the GC moves an object
> around, then it follows this list of stack frames, finding if a value
> exists anywhere on the C stack pointing to that object, and adjusting
> the value pointer to point to wherever the object moved to.
> 
> (It's helpful to examine the macro definition in the header files to
> really see what's going on.)

This is something useful to know, thanks for the pointers.  I actually
checked the basics of these OCaml C API, although not that in-depth.

I changed patches 1 & 2 according to what you've pointed out, sending
them soon for review.

Thanks,
-- 
Pino Toscano




More information about the Libguestfs mailing list