
On Fri, Aug 16, 2019 at 05:57:36PM +0300, Ilias Stamatis wrote:
On Fri, Aug 16, 2019 at 5:39 PM Erik Skultety <eskultet@redhat.com> wrote:
...
+ + if (operation == TEST_DEVICE_DETACH) + parse_flags |= VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE;
^This should be added by patch 3/5
+ + if (xml) { + if (!(dev = virDomainDeviceDefParse(xml, def, + driver->caps, driver->xmlopt, + NULL, parse_flags))) + goto cleanup; + } else if (alias) { + if (VIR_ALLOC(dev) < 0 || virDomainDefFindDevice(def, alias, dev, true) < 0) + goto cleanup; + } + + switch (operation) { + case TEST_DEVICE_ATTACH: + if (testDomainAttachDeviceLiveAndConfig(def, dev) < 0) + goto cleanup; + break; + case TEST_DEVICE_DETACH: + break; + case TEST_DEVICE_UPDATE: + break; + } + + ret = 0; + cleanup: + if (xml) + virDomainDeviceDefFree(dev); + else + VIR_FREE(dev);
virDomainDeviceDefFree() can handle both cases.
It cannot! This got me as well and made me wonder!
Try attaching a device with an alias and then try detaching it with virDomainDetachDeviceAlias and use virDomainDeviceDefFree to free the resource.
The program crashes with: free(): double free detected in tcache 2
Hmm, I'll have a look at why that is, probably on Sunday, I'll go ahead and perform the other changes on my branch, but I won't merge the series yet. Regards, Erik