File 60386825-libxl-mig-start-paused.patch of Package libvirt.11695

commit 60386825646c24fbcb9160306e298ed6f52f3f02
Author: Jim Fehlig <jfehlig@suse.com>
Date:   Wed Nov 12 17:15:37 2014 -0700

    libxl: start domain paused on migration dst
    
    During the perform phase of migration, the domain is started on
    the dst host in a running state if VIR_MIGRATE_PAUSED flag is not
    specified.  In the finish phase, the domain is also unpaused if
    VIR_MIGRATE_PAUSED flag is unset.  I've noticed this second unpause
    fails if the domain was already unpaused following the perform phase.
    
    This patch changes the perform phase to always start the domain
    paused, and defers unpausing, if requested, to the finish phase.
    Unpausing should occur in the finish phase anyhow, where the domain
    can be properly destroyed if the perform phase fails and migration
    is cancelled.
    
    Signed-off-by: Jim Fehlig <jfehlig@suse.com>

Index: libvirt-1.2.5/src/libxl/libxl_migration.c
===================================================================
--- libvirt-1.2.5.orig/src/libxl/libxl_migration.c
+++ libvirt-1.2.5/src/libxl/libxl_migration.c
@@ -90,14 +90,17 @@ libxlDoMigrateReceive(void *opaque)
     virDomainObjPtr vm = args->vm;
     virNetSocketPtr *socks = args->socks;
     size_t nsocks = args->nsocks;
-    bool paused = args->flags & VIR_MIGRATE_PAUSED;
     libxlDriverPrivatePtr driver = args->conn->privateData;
     int recvfd = args->recvfd;
     size_t i;
     int ret;
 
+    /*
+     * Always start the domain paused.  If needed, unpause in the
+     * finish phase, after transfer of the domain is complete.
+     */
     virObjectLock(vm);
-    ret = libxlDomainStart(driver, vm, paused, recvfd);
+    ret = libxlDomainStart(driver, vm, true, recvfd);
     virObjectUnlock(vm);
 
     if (ret < 0 && !vm->persistent)