[Libguestfs] [PATCH libnbd 2/3] python: Hold a refcount to persistent AIO buffer until command completion.

Eric Blake eblake at redhat.com
Wed Aug 14 21:36:00 UTC 2019


On 8/14/19 4:05 PM, Richard W.M. Jones wrote:
> ---
>  generator/generator | 31 ++++++++++++++++++++++++++++---
>  1 file changed, 28 insertions(+), 3 deletions(-)
> 
> diff --git a/generator/generator b/generator/generator

>  
> +  (* If there is a BytesPersistIn/Out parameter then we need to
> +   * increment the refcount and save the pointer into
> +   * completion_callback.user_data so we can decrement the
> +   * refcount on command completion.
> +   *)
> +  List.iter (
> +    function
> +    | BytesPersistIn (n, _) | BytesPersistOut (n, _) ->
> +       pr "  /* Increment refcount since buffer may be saved by libnbd. */\n";
> +       pr "  Py_INCREF (%s);\n" n;
> +       pr "  completion_user_data->buf = %s;\n" n;
> +    | _ -> ()
> +  ) args;
> +

Is it worth a sanity check that we never have more than one
BytesPersist* parameter (as otherwise, we'd have to store more than one
pointer in the user_data struct)?  Doesn't change current code
generation (since we satisfy that constraint), but would make future
additions less likely to mess up (and as it affects both python and
ocaml, doing it in a separate patch is fine).


> @@ -4403,7 +4425,10 @@ let generate_python_methods_c () =
>    pr "{\n";
>    pr "  struct user_data *data = user_data;\n";
>    pr "\n";
> -  pr "  Py_DECREF (data->fn);\n";
> +  pr "  if (data->fn != NULL)\n";
> +  pr "    Py_DECREF (data->fn);\n";
> +  pr "  if (data->buf != NULL)\n";
> +  pr "    Py_DECREF (data->buf);\n";

Spell these Py_XDECREF() and you can avoid the 'if's.

-- 
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/20190814/a066ceb2/attachment.sig>


More information about the Libguestfs mailing list