From 8eacfd4cc23e88d12d671502dc29f700aab66b78 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Wed, 2 Sep 2009 15:09:04 +0100 Subject: [PATCH] Fix misc OOM bugs * tests/testutils.c: Run test function twice, once to prime it for static allocations, once to count the non-static allocations. * tests/testutilsqemu.c: Initialize variable correctl * src/capabilities.c: Don't free machines variable upon failure since caller must do that * src/xm_internal.c: Add missing check for OOM in building VIF config param --- src/capabilities.c | 17 +++++++++-------- src/xm_internal.c | 3 +++ tests/testutils.c | 12 ++++++++---- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/capabilities.c b/src/capabilities.c index 193a9fe973..289180df07 100644 --- a/src/capabilities.c +++ b/src/capabilities.c @@ -354,10 +354,6 @@ virCapabilitiesAddGuest(virCapsPtr caps, if (loader && (guest->arch.defaultInfo.loader = strdup(loader)) == NULL) goto no_memory; - if (nmachines) { - guest->arch.defaultInfo.nmachines = nmachines; - guest->arch.defaultInfo.machines = machines; - } if (VIR_REALLOC_N(caps->guests, caps->nguests + 1) < 0) @@ -365,6 +361,11 @@ virCapabilitiesAddGuest(virCapsPtr caps, caps->guests[caps->nguests] = guest; caps->nguests++; + if (nmachines) { + guest->arch.defaultInfo.nmachines = nmachines; + guest->arch.defaultInfo.machines = machines; + } + return guest; no_memory: @@ -407,10 +408,6 @@ virCapabilitiesAddGuestDomain(virCapsGuestPtr guest, if (loader && (dom->info.loader = strdup(loader)) == NULL) goto no_memory; - if (nmachines) { - dom->info.nmachines = nmachines; - dom->info.machines = machines; - } if (VIR_REALLOC_N(guest->arch.domains, guest->arch.ndomains + 1) < 0) @@ -418,6 +415,10 @@ virCapabilitiesAddGuestDomain(virCapsGuestPtr guest, guest->arch.domains[guest->arch.ndomains] = dom; guest->arch.ndomains++; + if (nmachines) { + dom->info.nmachines = nmachines; + dom->info.machines = machines; + } return dom; diff --git a/src/xm_internal.c b/src/xm_internal.c index dd44ce5f7d..2595a5e9a5 100644 --- a/src/xm_internal.c +++ b/src/xm_internal.c @@ -2046,6 +2046,9 @@ static int xenXMDomainConfigFormatNet(virConnectPtr conn, virBufferVSprintf(&buf, ",vifname=%s", net->ifname); + if (virBufferError(&buf)) + goto cleanup; + if (VIR_ALLOC(val) < 0) { virReportOOMError(conn); goto cleanup; diff --git a/tests/testutils.c b/tests/testutils.c index 7a1dbdcdd8..5072fecb6b 100644 --- a/tests/testutils.c +++ b/tests/testutils.c @@ -367,10 +367,7 @@ int virtTestMain(int argc, } } - if (testOOM) - virAllocTestInit(); - - /* Run once to count allocs, and ensure it passes :-) */ + /* Run once to prime any static allocations & ensure it passes */ ret = (func)(argc, argv); if (ret != EXIT_SUCCESS) goto cleanup; @@ -385,6 +382,13 @@ int virtTestMain(int argc, testOOM++; virSetErrorFunc(NULL, virtTestErrorFuncQuiet); + virAllocTestInit(); + + /* Run again to count allocs, and ensure it passes :-) */ + ret = (func)(argc, argv); + if (ret != EXIT_SUCCESS) + goto cleanup; + approxAlloc = virAllocTestCount(); testCounter++; if (testDebug) -- GitLab