[libvirt] [PATCH] vbox: Fix passing an empty IMedium* array to IMachine::Delete

Jean-Baptiste Rouault jean-baptiste.rouault at diateam.net
Mon Apr 23 08:29:56 UTC 2012


On Sunday 22 April 2012 10:35:59 Matthias Bolte wrote:
> vboxArray is not castable to a COM item type. vboxArray is a
> wrapper around the XPCOM and MSCOM specific array handling.
> 
> In this case we can avoid passing NULL as an empty array to
> IMachine::Delete by passing a dummy IMedium* array with a single
> NULL item.
> ---
> 
> Jean-Baptiste, I can not reproduce the assertion you mentioned, or
> I don't know where to look for it. So could you verify that is patch
> avoids this assertion?
> 
>  src/vbox/vbox_tmpl.c |    9 ++++-----
>  1 files changed, 4 insertions(+), 5 deletions(-)
> 
> diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
> index 57c18a4..4b0ee2e 100644
> --- a/src/vbox/vbox_tmpl.c
> +++ b/src/vbox/vbox_tmpl.c
> @@ -5294,11 +5294,10 @@ vboxDomainUndefineFlags(virDomainPtr dom, unsigned
> int flags)
> 
>          ((IMachine_Delete)machine->vtbl->Delete)(machine, &safeArray,
> &progress); # else
> -        union {
> -            vboxArray array;
> -            IMedium *medium;
> -        } u = { .array = VBOX_ARRAY_INITIALIZER };
> -        machine->vtbl->Delete(machine, 0, &u.medium, &progress);
> +        /* XPCOM doesn't like NULL as an array, even when the array size
> is 0. +         * Instead pass it a dummy array to avoid passing NULL. */
> +        IMedium *array[] = { NULL };
> +        machine->vtbl->Delete(machine, 0, array, &progress);
>  # endif
>          if (progress != NULL) {
>              progress->vtbl->WaitForCompletion(progress, -1);

The patch is good, I don't get the assertion anymore.

-- 
Jean-Baptiste ROUAULT
Ingénieur R&D - diateam : Architectes de l'information
Phone : +33 (0)2 98 050 050 Fax : +33 (0)2 98 050 051




More information about the libvir-list mailing list