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

Matthias Bolte matthias.bolte at googlemail.com
Sun Apr 22 08:35:59 UTC 2012


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);
-- 
1.7.4.1




More information about the libvir-list mailing list