[Libguestfs] [PATCH libnbd v2 3/3] api: Add nbd_clear_debug_callback.
Eric Blake
eblake at redhat.com
Tue Aug 13 15:41:27 UTC 2019
On 8/13/19 10:12 AM, Richard W.M. Jones wrote:
> Commit 0904dd113dfa36485623b3c1756dc1aeab3dddeb removed the
> theoretical possibility of clearing the debug callback from the handle
> by setting it to NULL (although that was dubious from an API point of
> view).
>
> This commit adds an explicit way to do this. Another advantage of
> this is we can internally call this API from other places when we want
> to clear/free the debug callback.
> ---
> generator/generator | 11 +++++++++++
> lib/debug.c | 17 ++++++++++++++---
> lib/handle.c | 4 +---
> 3 files changed, 26 insertions(+), 6 deletions(-)
>
> diff --git a/generator/generator b/generator/generator
> index 6ccfc5f..d76eeea 100755
> --- a/generator/generator
> +++ b/generator/generator
> @@ -1013,6 +1013,17 @@ a handle then messages are printed on C<stderr>.
>
> The callback should not call C<nbd_*> APIs on the same handle since it can
> be called while holding the handle lock and will cause a deadlock.";
> +};
> +
> + "clear_debug_callback", {
> + default_call with
> + args = [];
> + ret = RErr;
Is RErr the right type, or can we make this a 'never fails' function?
> + shortdesc = "clear the debug callback";
> + longdesc = "\
> +Remove the debug callback if one was previously associated
> +with the handle (with C<nbd_set_debug_callback>). If not
s/not/no/
> +callback was associated this does nothing.";
> };
>
> "set_handle_name", {
> diff --git a/lib/debug.c b/lib/debug.c
> index ad4d9cb..c1decb2 100644
> --- a/lib/debug.c
> +++ b/lib/debug.c
> @@ -38,13 +38,24 @@ nbd_unlocked_get_debug (struct nbd_handle *h)
> return h->debug;
> }
>
> +int
> +nbd_unlocked_clear_debug_callback (struct nbd_handle *h)
> +{
> + if (h->debug_callback)
> + /* ignore return value */
> + h->debug_callback (LIBNBD_CALLBACK_FREE, h->debug_data, NULL, NULL);
> + h->debug_callback = NULL;
> + h->debug_data = NULL;
> + return 0;
> +}
Is it worth returning -1 if no callback was associated, and/or
forwarding the return value of callback(FREE, ptr) as the return value
of this function? (That's more complicated; I'm also fine with always
returning 0 and ignoring the callback(FREE) return).
ACK with the typo fix.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20190813/18b4f285/attachment.sig>
More information about the Libguestfs
mailing list