[Libguestfs] [libnbd] More thoughts on callbacks and more
Richard W.M. Jones
rjones at redhat.com
Mon Jul 22 09:08:25 UTC 2019
On Sat, Jul 20, 2019 at 07:38:45AM +0100, Richard W.M. Jones wrote:
> More thoughts on callbacks, etc. following on from:
> https://www.redhat.com/archives/libguestfs/2019-July/thread.html#00184
>
> Closure lifetimes
> -----------------
>
> Closures could have a lifetime if we had a little bit of support from
> the C library. We would generate (from C only):
>
> nbd_set_free_<fn>_<closure> (nbd, free_closure);
>
> which calls free_closure (user_data) as soon as the closure will no
> longer be called by the library. This function would be used to
> decrement the refcount from Python or remove the global root from
> OCaml.
>
> Note this is a family of functions, eg:
>
> nbd_set_free_set_debug_callback_debug_fn
>
> corresponding to the debug_fn arg of nbd_set_debug_callback. Luckily
> they can all be generated along with the internal machinery to call
> them.
As written above this doesn't quite work. However it could work to
pass an optional free function with the closure. In other words it
would look like:
struct nbd_closure { .cl = my_debug_fn,
.user_data = foo, .free = my_free } cl;
nbd_set_debug_callback (nbd, &cl);
cl->free (cl->user_data) is called if cl->free != NULL when the
closure is no longer used by the library.
This is a bit of a change to the API however.
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine. Supports Linux and Windows.
http://people.redhat.com/~rjones/virt-df/
More information about the Libguestfs
mailing list