On Wed, Apr 22, 2026 at 11:34:27 +0200, Denis V. Lunev wrote:
> When libvirtd reconnects to a running QEMU process that had an
> in-progress migration, qemuProcessReconnect first connects the
> monitor and only later recovers the migration job. During this window
> the async job is VIR_ASYNC_JOB_NONE, so any MIGRATION status events
> from QEMU are silently dropped by qemuProcessHandleMigrationStatus.
> 
> If the migration was already cancelled or completed by QEMU during
> this window, no further events will be emitted. When
> qemuMigrationSrcCancelUnattended later restores the async job and
> calls qemuMigrationSrcCancel with wait=true, the wait loop calls
> qemuDomainObjWait (virCondWait with no timeout) and blocks forever
> waiting for an event that will never arrive.
> 
> qemuProcessRecoverMigration already queries QEMU for the current
> migration state via qemuMigrationAnyRefreshStatus and passes the
> result to qemuProcessRecoverMigrationOut as migStatus. Plumb that
> value one level further into qemuMigrationSrcCancelUnattended and,
> when it indicates the migration has already reached a terminal
> state (VIR_DOMAIN_JOB_STATUS_CANCELED), skip restoring the async
> job and the qemuMigrationSrcCancel/virDomainObjEndAsyncJob pair
> entirely.
> 
> Signed-off-by: Denis V. Lunev <[email protected]>
> Suggested-by: Jiri Denemark <[email protected]>
> CC: Peter Krempa <[email protected]>
> CC: Michal Privoznik <[email protected]>

Thanks. Indeed the patch ended up in my spam box again :-(

Reviewed-by: Jiri Denemark <[email protected]>
and pushed.

Reply via email to