]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Fix bogus valgrind memory leak warnings in test suite
authorDaniel P. Berrange <berrange@redhat.com>
Wed, 28 Jan 2009 21:53:48 +0000 (21:53 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Wed, 28 Jan 2009 21:53:48 +0000 (21:53 +0000)
ChangeLog
tests/.valgrind.supp
tests/testutils.c

index ec381eca200781a3e73e493321517c5a7731a9b7..ef17590f06a25e0a0719f04a80d89fcfdc1b91f2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,11 @@
-Wed Jan 28 21:33:11 GMT 2009 Daniel P.Berrange <berrange@redhat.com
+Wed Jan 28 21:53:11 GMT 2009 Daniel P.Berrange <berrange@redhat.com>
+
+       Fix bogus valgrind memory leak warnings
+       * tests/testutils.c: Clear global error upon exit
+       * tests/.valgrind.supp: Ignore memory from thread local
+       error storage
+
+Wed Jan 28 21:33:11 GMT 2009 Daniel P.Berrange <berrange@redhat.com>
 
        Fix RPC portability to Solaris
        * configure.in: s/RPCGEN/HAVE_RPCGEN/ for automake
index 9a466d75ba055c1f99c1c3aba57bd9a6002c7154..3188efe73574e5b7b2ea55d243a43086ba9d8526 100644 (file)
    fun:virtTestRun
    fun:mymain
 }
+{
+   ignoreThreadLocalErrorObject
+   Memcheck:Leak
+   fun:calloc
+   fun:virAlloc
+   fun:virLastErrorObject
+   fun:virRaiseError
+   fun:statsErrorFunc
+   fun:xenLinuxDomainDeviceID
+   fun:testDeviceHelper
+   fun:virtTestRun
+   fun:mymain
+   fun:virtTestMain
+   fun:main
+}
index 7c6ae61b1c67a378a36320bb451f758fca78cffc..e8b07fc609f1918e79ea5191c85e6e649609933e 100644 (file)
@@ -26,6 +26,8 @@
 #include "internal.h"
 #include "memory.h"
 #include "util.h"
+#include "threads.h"
+#include "virterror_internal.h"
 
 #if TEST_OOM_TRACE
 #include <execinfo.h>
@@ -319,8 +321,8 @@ int virtTestMain(int argc,
                  int (*func)(int, char **))
 {
     char *debugStr;
-#if TEST_OOM
     int ret;
+#if TEST_OOM
     int approxAlloc = 0;
     int n;
     char *oomStr = NULL;
@@ -330,6 +332,10 @@ int virtTestMain(int argc,
     int worker = 0;
 #endif
 
+    if (virThreadInitialize() < 0 ||
+        virErrorInitialize() < 0)
+        return 1;
+
     if ((debugStr = getenv("VIR_TEST_DEBUG")) != NULL) {
         if (virStrToLong_ui(debugStr, NULL, 10, &testDebug) < 0)
             testDebug = 0;
@@ -349,8 +355,10 @@ int virtTestMain(int argc,
     if (getenv("VIR_TEST_MP") != NULL) {
         mp = sysconf(_SC_NPROCESSORS_ONLN);
         fprintf(stderr, "Using %d worker processes\n", mp);
-        if (VIR_ALLOC_N(workers, mp) < 0)
-            return EXIT_FAILURE;
+        if (VIR_ALLOC_N(workers, mp) < 0) {
+            ret = EXIT_FAILURE;
+            goto cleanup;
+        }
     }
 
     if (testOOM)
@@ -359,7 +367,7 @@ int virtTestMain(int argc,
     /* Run once to count allocs, and ensure it passes :-) */
     ret = (func)(argc, argv);
     if (ret != EXIT_SUCCESS)
-        return EXIT_FAILURE;
+        goto cleanup;
 
 #if TEST_OOM_TRACE
     if (testDebug)
@@ -431,9 +439,11 @@ int virtTestMain(int argc,
         else
             fprintf(stderr, " FAILED\n");
     }
-    return ret;
-
+cleanup:
 #else
-    return (func)(argc, argv);
+    ret = (func)(argc, argv);
 #endif
+
+    virResetLastError();
+    return ret;
 }