]> xenbits.xensource.com Git - libvirt.git/commitdiff
Autostart domains using virDomainObjStart
authorJiri Denemark <jdenemar@redhat.com>
Thu, 20 May 2010 10:02:58 +0000 (12:02 +0200)
committerJiri Denemark <jdenemar@redhat.com>
Fri, 21 May 2010 07:30:16 +0000 (09:30 +0200)
src/qemu/qemu_driver.c

index f274b2e0ea5d321ba2b6eacb98838e4a40be2179..2f644c974c5e323d13ea3e5f4c5c484d2928f6ae 100644 (file)
@@ -626,29 +626,31 @@ qemuAutostartDomain(void *payload, const char *name ATTRIBUTE_UNUSED, void *opaq
 {
     virDomainObjPtr vm = payload;
     struct qemuAutostartData *data = opaque;
+    virErrorPtr err;
 
     virDomainObjLock(vm);
-    if (vm->autostart &&
-        !virDomainObjIsActive(vm)) {
-        int ret;
-
-        virResetLastError();
-        ret = qemudStartVMDaemon(data->conn, data->driver, vm, NULL, -1);
-        if (ret < 0) {
-            virErrorPtr err = virGetLastError();
+    virResetLastError();
+    if (qemuDomainObjBeginJobWithDriver(data->driver, vm) < 0) {
+        err = virGetLastError();
+        VIR_ERROR(_("Failed to start job on VM '%s': %s"),
+                  vm->def->name,
+                  err ? err->message : _("unknown error"));
+    } else {
+        if (vm->autostart &&
+            !virDomainObjIsActive(vm) &&
+            qemudDomainObjStart(data->conn, data->driver, vm) < 0) {
+            err = virGetLastError();
             VIR_ERROR(_("Failed to autostart VM '%s': %s"),
                       vm->def->name,
                       err ? err->message : _("unknown error"));
-        } else {
-            virDomainEventPtr event =
-                virDomainEventNewFromObj(vm,
-                                         VIR_DOMAIN_EVENT_STARTED,
-                                         VIR_DOMAIN_EVENT_STARTED_BOOTED);
-            if (event)
-                qemuDomainEventQueue(data->driver, event);
         }
+
+        if (qemuDomainObjEndJob(vm) == 0)
+            vm = NULL;
     }
-    virDomainObjUnlock(vm);
+
+    if (vm)
+        virDomainObjUnlock(vm);
 }
 
 static void