]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
vbox: Rewrite vboxDomainSetVcpusFlags
authorTaowei <uaedante@gmail.com>
Mon, 11 Aug 2014 10:06:38 +0000 (18:06 +0800)
committerMichal Privoznik <mprivozn@redhat.com>
Fri, 15 Aug 2014 07:25:11 +0000 (09:25 +0200)
src/vbox/vbox_common.c
src/vbox/vbox_tmpl.c
src/vbox/vbox_uniformed_api.h

index 5240fc30616d8ac044edfbb254006b5117cff7ae..7ccfba04957f61088890316c709262a3a6f2a813 100644 (file)
@@ -2775,3 +2775,49 @@ int vboxDomainGetState(virDomainPtr dom, int *state,
     vboxIIDUnalloc(&domiid);
     return ret;
 }
+
+int vboxDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
+                            unsigned int flags)
+{
+    VBOX_OBJECT_CHECK(dom->conn, int, -1);
+    IMachine *machine    = NULL;
+    vboxIIDUnion iid;
+    PRUint32  CPUCount   = nvcpus;
+    nsresult rc;
+
+    if (flags != VIR_DOMAIN_AFFECT_LIVE) {
+        virReportError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
+        return -1;
+    }
+
+    if (openSessionForMachine(data, dom->uuid, &iid, &machine, true) < 0)
+        return -1;
+
+    rc = gVBoxAPI.UISession.Open(data, &iid, machine);
+    if (NS_SUCCEEDED(rc)) {
+        gVBoxAPI.UISession.GetMachine(data->vboxSession, &machine);
+        if (machine) {
+            rc = gVBoxAPI.UIMachine.SetCPUCount(machine, CPUCount);
+            if (NS_SUCCEEDED(rc)) {
+                gVBoxAPI.UIMachine.SaveSettings(machine);
+                ret = 0;
+            } else {
+                virReportError(VIR_ERR_INTERNAL_ERROR,
+                               _("could not set the number of cpus of the domain "
+                                 "to: %u, rc=%08x"),
+                               CPUCount, (unsigned)rc);
+            }
+            VBOX_RELEASE(machine);
+        } else {
+            virReportError(VIR_ERR_NO_DOMAIN,
+                           _("no domain with matching id %d"), dom->id);
+        }
+    } else {
+        virReportError(VIR_ERR_NO_DOMAIN,
+                       _("can't open session to the domain with id %d"), dom->id);
+    }
+    gVBoxAPI.UISession.Close(data->vboxSession);
+
+    vboxIIDUnalloc(&iid);
+    return ret;
+}
index e9dd78d72a273048f9a6114438d1a6bded4691a9..7766d906b7abceff5f0467f02fd043c0f16c9a65 100644 (file)
@@ -955,61 +955,6 @@ static virDomainState _vboxConvertState(PRUint32 state)
     }
 }
 
-static int
-vboxDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
-                        unsigned int flags)
-{
-    VBOX_OBJECT_CHECK(dom->conn, int, -1);
-    IMachine *machine    = NULL;
-    vboxIID iid = VBOX_IID_INITIALIZER;
-    PRUint32  CPUCount   = nvcpus;
-    nsresult rc;
-
-    if (flags != VIR_DOMAIN_AFFECT_LIVE) {
-        virReportError(VIR_ERR_INVALID_ARG, _("unsupported flags: (0x%x)"), flags);
-        return -1;
-    }
-
-    vboxIIDFromUUID(&iid, dom->uuid);
-#if VBOX_API_VERSION >= 4000000
-    /* Get machine for the call to VBOX_SESSION_OPEN */
-    rc = VBOX_OBJECT_GET_MACHINE(iid.value, &machine);
-    if (NS_FAILED(rc)) {
-        virReportError(VIR_ERR_NO_DOMAIN, "%s",
-                       _("no domain with matching uuid"));
-        return -1;
-    }
-#endif
-
-    rc = VBOX_SESSION_OPEN(iid.value, machine);
-    if (NS_SUCCEEDED(rc)) {
-        data->vboxSession->vtbl->GetMachine(data->vboxSession, &machine);
-        if (machine) {
-            rc = machine->vtbl->SetCPUCount(machine, CPUCount);
-            if (NS_SUCCEEDED(rc)) {
-                machine->vtbl->SaveSettings(machine);
-                ret = 0;
-            } else {
-                virReportError(VIR_ERR_INTERNAL_ERROR,
-                               _("could not set the number of cpus of the domain "
-                                 "to: %u, rc=%08x"),
-                               CPUCount, (unsigned)rc);
-            }
-            VBOX_RELEASE(machine);
-        } else {
-            virReportError(VIR_ERR_NO_DOMAIN,
-                           _("no domain with matching id %d"), dom->id);
-        }
-    } else {
-        virReportError(VIR_ERR_NO_DOMAIN,
-                       _("can't open session to the domain with id %d"), dom->id);
-    }
-    VBOX_SESSION_CLOSE();
-
-    vboxIIDUnalloc(&iid);
-    return ret;
-}
-
 static int
 vboxDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus)
 {
index 0f6c8eadc4213fd609261e6a310969c35fdf2717..84a8a3750669ef9d7cbac3e8a0bae2a20d0232ee 100644 (file)
@@ -438,6 +438,9 @@ int vboxDomainSetMemory(virDomainPtr dom, unsigned long memory);
 int vboxDomainGetInfo(virDomainPtr dom, virDomainInfoPtr info);
 int vboxDomainGetState(virDomainPtr dom, int *state,
                        int *reason, unsigned int flags);
+int vboxDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
+                            unsigned int flags);
+
 
 /* Version specified functions for installing uniformed API */
 void vbox22InstallUniformedAPI(vboxUniformedAPI *pVBoxAPI);