[libvirt] [libvirt-java] [PATCH 30/65] Fix Domain.getSchedulerParameters / getSchedulerType

Claudio Bley cbley at av-test.de
Thu Feb 13 15:22:38 UTC 2014


The getSchedulerType method returns a String (the name of the
scheduler), not a String array containing a single element.

It's OK to just pass null for the second argument to
virDomainGetSchedulerType.

Ensure to free the returned string.

Signed-off-by: Claudio Bley <cbley at av-test.de>
---
 src/main/java/org/libvirt/Domain.java |   43 +++++++++++++++++++--------------
 1 file changed, 25 insertions(+), 18 deletions(-)

diff --git a/src/main/java/org/libvirt/Domain.java b/src/main/java/org/libvirt/Domain.java
index ab6f9f0..6db8745 100644
--- a/src/main/java/org/libvirt/Domain.java
+++ b/src/main/java/org/libvirt/Domain.java
@@ -528,18 +528,25 @@ public class Domain {
      */
     public SchedParameter[] getSchedulerParameters() throws LibvirtException {
         IntByReference nParams = new IntByReference();
-        SchedParameter[] returnValue = new SchedParameter[0];
-        Pointer pScheduler = processError(libvirt.virDomainGetSchedulerType(VDP, nParams));
-        String scheduler = Library.getString(pScheduler);
-        Library.free(pScheduler);
-        virSchedParameter[] nativeParams = new virSchedParameter[nParams.getValue()];
-        returnValue = new SchedParameter[nParams.getValue()];
-        processError(libvirt.virDomainGetSchedulerParameters(VDP, nativeParams, nParams));
-        for (int x = 0; x < nParams.getValue(); x++) {
-            returnValue[x] = SchedParameter.create(nativeParams[x]);
-        }
+        Library.free(processError(libvirt.virDomainGetSchedulerType(VDP, nParams)));
 
-        return returnValue;
+        int n = nParams.getValue();
+
+        if (n > 0) {
+            virSchedParameter[] nativeParams = new virSchedParameter[n];
+
+            processError(libvirt.virDomainGetSchedulerParameters(VDP, nativeParams, nParams));
+            n = nParams.getValue();
+
+            SchedParameter[] returnValue = new SchedParameter[n];
+
+            for (int x = 0; x < n; x++) {
+                returnValue[x] = SchedParameter.create(nativeParams[x]);
+            }
+            return returnValue;
+        } else {
+            return new SchedParameter[] {};
+        }
     }
 
     // getSchedulerType
@@ -552,13 +559,13 @@ public class Domain {
      * @return the type of the scheduler
      * @throws LibvirtException
      */
-    public String[] getSchedulerType() throws LibvirtException {
-        IntByReference nParams = new IntByReference();
-        Pointer pScheduler = processError(libvirt.virDomainGetSchedulerType(VDP, nParams));
-        String[] array = new String[1];
-        array[0] = Library.getString(pScheduler);
-        Library.free(pScheduler);
-        return array;
+    public String getSchedulerType() throws LibvirtException {
+        Pointer pScheduler = processError(libvirt.virDomainGetSchedulerType(VDP, null));
+        try {
+            return Library.getString(pScheduler);
+        } finally {
+            Library.free(pScheduler);
+        }
     }
 
     /**
-- 
1.7.9.5




More information about the libvir-list mailing list