]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemuProcessRefreshDisks: Don't skip filling of disk information if tray state didn...
authorPeter Krempa <pkrempa@redhat.com>
Thu, 9 Feb 2023 08:40:32 +0000 (09:40 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 9 Feb 2023 09:17:08 +0000 (10:17 +0100)
Commit 5ef2582646eb98 added emitting of even when refreshign disk state,
where it wanted to avoid sending the event if disk state didn't change.
This was achieved by using 'continue' in the loop filling the
information. Unfortunately this skips extraction of whether the device
has a tray which is propagated into internal structures, which in turn
broke cdrom media change as the code thought there's no tray for the
device.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2166411
Fixes: 5ef2582646eb98af208ce37355f82bdef39931fa
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Kristina Hanicova <khanicov@redhat.com>
src/qemu/qemu_process.c

index 566deb4c584fab3d2744d2c0d185569f2d53e350..d4499c6f844914852affdf86bbb004598c46d3cf 100644 (file)
@@ -8715,16 +8715,13 @@ qemuProcessRefreshDisks(virDomainObj *vm,
             continue;
 
         if (info->removable) {
-            virObjectEvent *event = NULL;
+            bool emitEvent = info->tray_open != disk->tray_status;
             int reason;
 
             if (info->empty)
                 virDomainDiskEmptySource(disk);
 
             if (info->tray) {
-                if (info->tray_open == disk->tray_status)
-                    continue;
-
                 if (info->tray_open) {
                     reason = VIR_DOMAIN_EVENT_TRAY_CHANGE_OPEN;
                     disk->tray_status = VIR_DOMAIN_DISK_TRAY_OPEN;
@@ -8733,8 +8730,10 @@ qemuProcessRefreshDisks(virDomainObj *vm,
                     disk->tray_status = VIR_DOMAIN_DISK_TRAY_CLOSED;
                 }
 
-                event = virDomainEventTrayChangeNewFromObj(vm, disk->info.alias, reason);
-                virObjectEventStateQueue(driver->domainEventState, event);
+                if (emitEvent) {
+                    virObjectEvent *event = virDomainEventTrayChangeNewFromObj(vm, disk->info.alias, reason);
+                    virObjectEventStateQueue(driver->domainEventState, event);
+                }
             }
         }