]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Prevent two threshold events when it was registered with index
authorPeter Krempa <pkrempa@redhat.com>
Thu, 1 Jul 2021 14:03:57 +0000 (16:03 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 12 Jul 2021 14:34:17 +0000 (16:34 +0200)
Remember whether the user passed an explicit index when registering the
event so that we can avoid the top level event when it isn't needed.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_driver.c
src/qemu/qemu_process.c

index 72f550bf8de565f4f3b17a34df21d447d2b771aa..df44c3fbd01604a0816024ab051c8dc72eab34fa 100644 (file)
@@ -19623,6 +19623,10 @@ qemuDomainSetBlockThreshold(virDomainPtr dom,
     if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0)
         goto endjob;
 
+    /* we need to remember whether the threshold was registered with an explicit
+     * index to fire the correct event */
+    src->thresholdEventWithIndex = !!strchr(dev, '[');
+
     ret = 0;
 
  endjob:
index 3693796b060e09071d08fae7ca0c8ebae9062fb2..7487e126406bdc4c079488473cd5bf71e5b24dfd 100644 (file)
@@ -1487,7 +1487,8 @@ qemuProcessHandleBlockThreshold(qemuMonitor *mon G_GNUC_UNUSED,
         if (virStorageSourceIsLocalStorage(src))
             path = src->path;
 
-        if (src == disk->src) {
+        if (src == disk->src &&
+            !src->thresholdEventWithIndex) {
             g_autofree char *dev = qemuDomainDiskBackingStoreGetName(disk, 0);
 
             eventDevice = virDomainEventBlockThresholdNewFromObj(vm, dev, path,