From 9e9ea3ead9825bd1dc2c17cea4abc8c4165591d0 Mon Sep 17 00:00:00 2001 From: Matthias Bolte Date: Sun, 9 Sep 2012 17:39:40 +0200 Subject: [PATCH] hyperv: Fix and improve hypervListAllDomains 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. --- src/hyperv/hyperv_driver.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c index bfedb2b6b5..4aed41fe52 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: