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@xxxxxxxxxx> --- src/qemu/qemu_process.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index e96b7689a3..59aa3f02aa 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -8711,16 +8711,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; @@ -8729,8 +8726,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); + } } } -- 2.39.1