[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 08/28] libxc: ocaml: add simple binding for xentoollog (output only).
> I think we should avoid returning "bare pointers" to the OCaml heap for two > reasons: [...] I see, thanks for pointing that out. > Instead of returning a "bare pointer" I think we should use a "Custom" > value. This involves declaring a "struct custom_operations" like this: > > static struct custom_operations foo_custom_operations = { > "foo_custom_operations", > custom_finalize_default, > custom_compare_default, > custom_hash_default, > custom_serialize_default, > custom_deserialize_default > }; > > And then wrapping and unwrapping "Custom" blocks using something like: > > #define Foo_val(x) (*((struct foo *)Data_custom_val(x))) > > static value > Val_foo (struct foo *x) > { > CAMLparam0 (); > CAMLlocal1 (result); > result = caml_alloc_custom (&foo_custom_operations, > sizeof (struct foo*), 0, 1); > Foo_val (result) = x; > CAMLreturn (result); > } I'll update all occurrences of this pattern. The same think happens for the libxl context as well. [...] > It's also worth considering whether to use the finalizer support to > automatically free the underlying C resource when the last reference to it > from OCaml has been GCed. This would be safer than exposing a direct > "free" function in the OCaml interface, since it would prevent use-after- > free. Agreed. I'll try this. Cheers, Rob _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |