On Thu, Jul 18, 2013 at 11:44:20 +0100, Daniel Berrange wrote: > On Thu, Jul 18, 2013 at 12:03:50PM +0200, Jiri Denemark wrote: > > --- > > > > Notes: > > Version 2: > > - update qemuhotplugtest to initialize domainEventState > > > > src/qemu/qemu_hotplug.c | 30 ++++++++++++++++++++++++++++-- > > tests/qemuhotplugtest.c | 3 +++ > > 2 files changed, 31 insertions(+), 2 deletions(-) > > > > diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c > > index b1ddd92..a6d9a03 100644 > > --- a/src/qemu/qemu_hotplug.c > > +++ b/src/qemu/qemu_hotplug.c > > @@ -2234,6 +2234,7 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver, > > virDomainDiskDefPtr disk) > > { > > virDomainDeviceDef dev; > > + virDomainEventPtr event; > > size_t i; > > > > VIR_DEBUG("Removing disk %s from domain %p %s", > > @@ -2241,6 +2242,10 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver, > > > > virDomainAuditDisk(vm, disk->src, NULL, "detach", true); > > > > + event = virDomainEventDeviceRemovedNewFromObj(vm, disk->info.alias); > > + if (event) > > + qemuDomainEventQueue(driver, event); > > + > > for (i = 0; i < vm->def->ndisks; i++) { > > if (vm->def->disks[i] == disk) { > > virDomainDiskRemove(vm->def, i); > > @@ -2269,15 +2274,20 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver, > > > > > > static void > > -qemuDomainRemoveControllerDevice(virQEMUDriverPtr driver ATTRIBUTE_UNUSED, > > +qemuDomainRemoveControllerDevice(virQEMUDriverPtr driver, > > virDomainObjPtr vm, > > virDomainControllerDefPtr controller) > > { > > + virDomainEventPtr event; > > size_t i; > > > > VIR_DEBUG("Removing controller %s from domain %p %s", > > controller->info.alias, vm, vm->def->name); > > > > + event = virDomainEventDeviceRemovedNewFromObj(vm, controller->info.alias); > > + if (event) > > + qemuDomainEventQueue(driver, event); > > + > > for (i = 0; i < vm->def->ncontrollers; i++) { > > if (vm->def->controllers[i] == controller) { > > virDomainControllerRemove(vm->def, i); > > @@ -2297,6 +2307,7 @@ qemuDomainRemoveNetDevice(virQEMUDriverPtr driver, > > { > > virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); > > virNetDevVPortProfilePtr vport; > > + virDomainEventPtr event; > > size_t i; > > > > VIR_DEBUG("Removing network interface %s from domain %p %s", > > @@ -2304,6 +2315,10 @@ qemuDomainRemoveNetDevice(virQEMUDriverPtr driver, > > > > virDomainAuditNet(vm, net, NULL, "detach", true); > > > > + event = virDomainEventDeviceRemovedNewFromObj(vm, net->info.alias); > > + if (event) > > + qemuDomainEventQueue(driver, event); > > + > > for (i = 0; i < vm->def->nnets; i++) { > > if (vm->def->nets[i] == net) { > > virDomainNetRemove(vm->def, i); > > @@ -2420,11 +2435,16 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver, > > virDomainHostdevDefPtr hostdev) > > { > > virDomainNetDefPtr net = NULL; > > + virDomainEventPtr event; > > size_t i; > > > > VIR_DEBUG("Removing host device %s from domain %p %s", > > hostdev->info->alias, vm, vm->def->name); > > > > + event = virDomainEventDeviceRemovedNewFromObj(vm, hostdev->info->alias); > > + if (event) > > + qemuDomainEventQueue(driver, event); > > + > > if (hostdev->parent.type == VIR_DOMAIN_DEVICE_NET) { > > net = hostdev->parent.data.net; > > > > I'm not 100% clear on why we need to emit the event from these methods > above. > > > > @@ -2477,13 +2497,19 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver, > > > > > > static void > > -qemuDomainRemoveChrDevice(virQEMUDriverPtr driver ATTRIBUTE_UNUSED, > > +qemuDomainRemoveChrDevice(virQEMUDriverPtr driver, > > virDomainObjPtr vm, > > virDomainChrDefPtr chr) > > { > > + virDomainEventPtr event; > > + > > VIR_DEBUG("Removing character device %s from domain %p %s", > > chr->info.alias, vm, vm->def->name); > > > > + event = virDomainEventDeviceRemovedNewFromObj(vm, chr->info.alias); > > + if (event) > > + qemuDomainEventQueue(driver, event); > > + > > qemuDomainChrRemove(vm->def, chr); > > virDomainChrDefFree(chr); > > } > > I would have though this is the only place where we should be emitting > the remove event. Emitting in the other methods seems to cause the > duplication of events, no ? No, all methods are specific to a single device type and since we want to emit the event for all device types, we have to emit it in each of these methods. Jirka -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list