[libvirt] [PATCH] hyperv: Fix and improve hypervListAllDomains

Matthias Bolte matthias.bolte at googlemail.com
Sun Sep 9 15:42:07 UTC 2012


Use MATCH for all flags checks.

hypervMsvmComputerSystemToDomain expects the domain pointer to the
initialized to NULL.

All items in doms up to the count-th one are valid, no need to double
check before freeing them.
---

I could no runtime-test this because I've have trouble getting my
Hyper-V setup working again.

 src/hyperv/hyperv_driver.c |   22 +++++++++++++---------
 1 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c
index 65934c9..349627d 100644
--- a/src/hyperv/hyperv_driver.c
+++ b/src/hyperv/hyperv_driver.c
@@ -1302,13 +1302,14 @@ hypervListAllDomains(virConnectPtr conn,
     virBufferAddLit(&query, MSVM_COMPUTERSYSTEM_WQL_VIRTUAL);
 
     /* construct query with filter depending on flags */
-    if (!(flags & VIR_CONNECT_LIST_DOMAINS_ACTIVE &&
-          flags & VIR_CONNECT_LIST_DOMAINS_INACTIVE)) {
-        if (flags & VIR_CONNECT_LIST_DOMAINS_ACTIVE) {
+    if (!(MATCH(VIR_CONNECT_LIST_DOMAINS_ACTIVE) &&
+          MATCH(VIR_CONNECT_LIST_DOMAINS_INACTIVE))) {
+        if (MATCH(VIR_CONNECT_LIST_DOMAINS_ACTIVE)) {
             virBufferAddLit(&query, "and ");
             virBufferAddLit(&query, MSVM_COMPUTERSYSTEM_WQL_ACTIVE);
         }
-        if (flags & VIR_CONNECT_LIST_DOMAINS_INACTIVE) {
+
+        if (MATCH(VIR_CONNECT_LIST_DOMAINS_INACTIVE)) {
             virBufferAddLit(&query, "and ");
             virBufferAddLit(&query, MSVM_COMPUTERSYSTEM_WQL_INACTIVE);
         }
@@ -1358,14 +1359,16 @@ hypervListAllDomains(virConnectPtr conn,
             continue;
         }
 
-        if (VIR_RESIZE_N(doms, ndoms, count,  2) < 0)
+        if (VIR_RESIZE_N(doms, ndoms, count, 2) < 0)
             goto no_memory;
 
+        domain = NULL;
+
         if (hypervMsvmComputerSystemToDomain(conn, computerSystem,
                                              &domain) < 0)
             goto cleanup;
 
-       doms[count++] = domain;
+        doms[count++] = domain;
     }
 
     if (doms)
@@ -1376,13 +1379,14 @@ hypervListAllDomains(virConnectPtr conn,
 cleanup:
     if (doms) {
         for (i = 0; i < count; ++i) {
-            if (doms[i])
-                virDomainFree(doms[i]);
+            virDomainFree(doms[i]);
         }
+
+        VIR_FREE(doms);
     }
 
-    VIR_FREE(doms);
     hypervFreeObject(priv, (hypervObject *)computerSystemList);
+
     return ret;
 
 no_memory:
-- 
1.7.4.1




More information about the libvir-list mailing list