]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add a new client request and pair of macros,
authorJulian Seward <jseward@acm.org>
Sun, 24 Jul 2011 16:02:33 +0000 (16:02 +0000)
committerJulian Seward <jseward@acm.org>
Sun, 24 Jul 2011 16:02:33 +0000 (16:02 +0000)
VALGRIND_{DISABLE,ENABLE}_ERROR_REPORTING, which allow a thread to
temporarily disable reporting of errors it makes.  This is useful for
making Memcheck behave sanely in the presence of some MPI
implementations.  Also mark up libmpiwrap.c accordingly.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11910

21 files changed:
NEWS
coregrind/m_errormgr.c
coregrind/m_scheduler/scheduler.c
coregrind/m_syswrap/syswrap-darwin.c
coregrind/m_syswrap/syswrap-linux.c
coregrind/pub_core_threadstate.h
include/valgrind.h
memcheck/tests/Makefile.am
memcheck/tests/err_disable1.c [new file with mode: 0644]
memcheck/tests/err_disable1.stderr.exp [new file with mode: 0644]
memcheck/tests/err_disable1.vgtest [new file with mode: 0644]
memcheck/tests/err_disable2.c [new file with mode: 0644]
memcheck/tests/err_disable2.stderr.exp [new file with mode: 0644]
memcheck/tests/err_disable2.vgtest [new file with mode: 0644]
memcheck/tests/err_disable3.c [new file with mode: 0644]
memcheck/tests/err_disable3.stderr.exp [new file with mode: 0644]
memcheck/tests/err_disable3.vgtest [new file with mode: 0644]
memcheck/tests/err_disable4.c [new file with mode: 0644]
memcheck/tests/err_disable4.stderr.exp [new file with mode: 0644]
memcheck/tests/err_disable4.vgtest [new file with mode: 0644]
mpi/libmpiwrap.c

diff --git a/NEWS b/NEWS
index 2b336b5aac5c6caeec3cbfaa4f0c11800991f05c..f43f8d374a0c5726d11fb1ac818ecea6eaa415a2 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,9 @@
 
 Release 3.7.0 (???)
 ~~~~~~~~~~~~~~~~~~~
+
+- new client requests VALGRIND_{DISABLE,ENABLE}_ERROR_REPORTING
+
 - Added the --mod-funcname option to cg_diff.
 - Further reduction in overheads caused by --smc-check=all, especially
   on 64-bit targets.
index 57a323f166c62758e066a7f84d2f04c387a9974d..89e7d466f529a8745c63b1647e8a3cce09e522b8 100644 (file)
@@ -693,6 +693,12 @@ void VG_(maybe_record_error) ( ThreadId tid,
       return;
    }
 
+   /* Ignore it if error acquisition is disabled for this thread. */
+   { ThreadState* tst = VG_(get_ThreadState)(tid);
+     if (tst->err_disablement_level > 0)
+        return;
+   }
+
    /* After M_COLLECT_ERRORS_SLOWLY_AFTER different errors have
       been found, be much more conservative about collecting new
       ones. */
@@ -817,6 +823,11 @@ Bool VG_(unique_error) ( ThreadId tid, ErrorKind ekind, Addr a, Char* s,
    Error err;
    Supp *su;
 
+   /* Ignore it if error acquisition is disabled for this thread. */
+   ThreadState* tst = VG_(get_ThreadState)(tid);
+   if (tst->err_disablement_level > 0)
+      return False; /* ignored, not suppressed */
+   
    /* Build ourselves the error */
    construct_error ( &err, tid, ekind, a, s, extra, where );
 
index df6c41895d988301daab06919ad4f6ecd1159b1a..6d708c58106c33c252a113c937efa9cf7278c2ff 100644 (file)
@@ -549,6 +549,7 @@ ThreadId VG_(scheduler_init_phase1) ( void )
       VG_(threads)[i].status                    = VgTs_Empty;
       VG_(threads)[i].client_stack_szB          = 0;
       VG_(threads)[i].client_stack_highest_word = (Addr)NULL;
+      VG_(threads)[i].err_disablement_level     = 0;
    }
 
    tid_main = VG_(alloc_ThreadState)();
@@ -1640,6 +1641,22 @@ void do_client_request ( ThreadId tid )
          break;
       }
 
+      case VG_USERREQ__CHANGE_ERR_DISABLEMENT: {
+         Word delta = arg[1];
+         vg_assert(delta == 1 || delta == -1);
+         ThreadState* tst = VG_(get_ThreadState)(tid);
+         vg_assert(tst);
+         if (delta == 1 && tst->err_disablement_level < 0xFFFFFFFF) {
+            tst->err_disablement_level++;
+         }
+         else
+         if (delta == -1 && tst->err_disablement_level > 0) {
+            tst->err_disablement_level--;
+         }
+         SET_CLREQ_RETVAL( tid, 0 ); /* return value is meaningless */
+         break;
+      }
+
       case VG_USERREQ__MALLOCLIKE_BLOCK:
       case VG_USERREQ__RESIZEINPLACE_BLOCK:
       case VG_USERREQ__FREELIKE_BLOCK:
index 463b33fbdb3c583c7daa99926e3f2ea1577cbe78..eb68bc335c07bf2f7d4c7f5e8ddb49e235b48c7e 100644 (file)
@@ -104,6 +104,9 @@ static VgSchedReturnCode thread_wrapper(Word /*ThreadId*/ tidW)
       VG_(printf)("thread tid %d started: stack = %p\n",
                   tid, &tid);
 
+   /* Make sure error reporting is enabled in the new thread. */
+   ctst->err_disablement_level = 0;
+
    VG_TRACK(pre_thread_first_insn, tid);
 
    tst->os_state.lwpid = VG_(gettid)();
@@ -202,12 +205,16 @@ static void run_a_thread_NORETURN ( Word tidW )
 {
    Int               c;
    VgSchedReturnCode src;
-   ThreadId tid = (ThreadId)tidW;
+   ThreadId          tid = (ThreadId)tidW;
+   ThreadState*      tst;
 
    VG_(debugLog)(1, "syswrap-darwin", 
                     "run_a_thread_NORETURN(tid=%lld): pre-thread_wrapper\n",
                     (ULong)tidW);
 
+   tst = VG_(get_ThreadState)(tid);
+   vg_assert(tst);
+
    /* Run the thread all the way through. */
    src = thread_wrapper(tid);  
 
@@ -221,6 +228,27 @@ static void run_a_thread_NORETURN ( Word tidW )
    // Tell the tool this thread is exiting
    VG_TRACK( pre_thread_ll_exit, tid );
 
+   /* If the thread is exiting with errors disabled, complain loudly;
+      doing so is bad (does the user know this has happened?)  Also,
+      in all cases, be paranoid and clear the flag anyway so that the
+      thread slot is safe in this respect if later reallocated.  This
+      should be unnecessary since the flag should be cleared when the
+      slot is reallocated, in thread_wrapper(). */
+   if (tst->disablement_level > 0) {
+      VG_(umsg)(
+         "WARNING: exiting thread has error reporting disabled.\n"
+         "WARNING: possibly as a result of some mistake in the use\n"
+         "WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.\n"
+      );
+      VG_(debugLog)(
+         1, "syswrap-linux", 
+            "run_a_thread_NORETURN(tid=%lld): "
+            "WARNING: exiting thread has err_disablement_level = %u\n",
+            (ULong)tidW, tst->err_disablement_level
+      );
+   }
+   tst->err_disablement_level = 0;
+
    if (c == 1) {
 
       VG_(debugLog)(1, "syswrap-darwin", 
@@ -235,7 +263,6 @@ static void run_a_thread_NORETURN ( Word tidW )
 
    } else {
 
-      ThreadState *tst;
       mach_msg_header_t msg;
 
       VG_(debugLog)(1, "syswrap-darwin", 
@@ -244,7 +271,6 @@ static void run_a_thread_NORETURN ( Word tidW )
                           (ULong)tidW);
 
       /* OK, thread is dead, but others still exist.  Just exit. */
-      tst = VG_(get_ThreadState)(tid);
 
       /* This releases the run lock */
       VG_(exit_thread)(tid);
index 57859d30164b673de7ad557fe10579dabf6d2ac2..c09aa53d5ab8b1b27611430749800434a3e9ecf0 100644 (file)
@@ -81,6 +81,9 @@ static VgSchedReturnCode thread_wrapper(Word /*ThreadId*/ tidW)
       VG_(printf)("thread tid %d started: stack = %p\n",
                  tid, &tid);
 
+   /* Make sure error reporting is enabled in the new thread. */
+   tst->err_disablement_level = 0;
+
    VG_TRACK(pre_thread_first_insn, tid);
 
    tst->os_state.lwpid = VG_(gettid)();
@@ -119,11 +122,15 @@ static void run_a_thread_NORETURN ( Word tidW )
    ThreadId          tid = (ThreadId)tidW;
    VgSchedReturnCode src;
    Int               c;
+   ThreadState*      tst;
 
    VG_(debugLog)(1, "syswrap-linux", 
                     "run_a_thread_NORETURN(tid=%lld): pre-thread_wrapper\n",
                     (ULong)tidW);
 
+   tst = VG_(get_ThreadState)(tid);
+   vg_assert(tst);
+
    /* Run the thread all the way through. */
    src = thread_wrapper(tid);  
 
@@ -137,6 +144,27 @@ static void run_a_thread_NORETURN ( Word tidW )
    // Tell the tool this thread is exiting
    VG_TRACK( pre_thread_ll_exit, tid );
 
+   /* If the thread is exiting with errors disabled, complain loudly;
+      doing so is bad (does the user know this has happened?)  Also,
+      in all cases, be paranoid and clear the flag anyway so that the
+      thread slot is safe in this respect if later reallocated.  This
+      should be unnecessary since the flag should be cleared when the
+      slot is reallocated, in thread_wrapper(). */
+   if (tst->err_disablement_level > 0) {
+      VG_(umsg)(
+         "WARNING: exiting thread has error reporting disabled.\n"
+         "WARNING: possibly as a result of some mistake in the use\n"
+         "WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.\n"
+      );
+      VG_(debugLog)(
+         1, "syswrap-linux", 
+            "run_a_thread_NORETURN(tid=%lld): "
+            "WARNING: exiting thread has err_disablement_level = %u\n",
+            (ULong)tidW, tst->err_disablement_level
+      );
+   }
+   tst->err_disablement_level = 0;
+
    if (c == 1) {
 
       VG_(debugLog)(1, "syswrap-linux", 
@@ -151,15 +179,12 @@ static void run_a_thread_NORETURN ( Word tidW )
 
    } else {
 
-      ThreadState *tst;
-
       VG_(debugLog)(1, "syswrap-linux", 
                        "run_a_thread_NORETURN(tid=%lld): "
                           "not last one standing\n",
                           (ULong)tidW);
 
       /* OK, thread is dead, but others still exist.  Just exit. */
-      tst = VG_(get_ThreadState)(tid);
 
       /* This releases the run lock */
       VG_(exit_thread)(tid);
index ba9404c77ad69d46e61484216eb3f411ae21292a..31c66e3b7c65319b6147dca7be3d05e19e59d379 100644 (file)
@@ -340,6 +340,14 @@ typedef struct {
    /* OS-specific thread state */
    ThreadOSstate os_state;
 
+   /* Error disablement level.  A counter which allows selectively
+      disabling error reporting in threads.  When zero, reporting is
+      enabled.  When nonzero, it is disabled.  This is controlled by
+      the client request 'VG_USERREQ__CHANGE_ERR_DISABLEMENT'.  New
+      threads are always created with this as zero (errors
+      enabled). */
+   UInt err_disablement_level;
+
    /* Per-thread jmp_buf to resume scheduler after a signal */
    Bool               sched_jmpbuf_valid;
    VG_MINIMAL_JMP_BUF(sched_jmpbuf);
index da3b8a1c21a7225f4a46762cded821cf46a10e76..22b8a617b3a19cfbad7431565ce779329c447394 100644 (file)
@@ -3644,7 +3644,14 @@ typedef
           VG_USERREQ__LOAD_PDB_DEBUGINFO = 0x1601,
 
           /* Querying of debug info. */
-          VG_USERREQ__MAP_IP_TO_SRCLOC = 0x1701
+          VG_USERREQ__MAP_IP_TO_SRCLOC = 0x1701,
+
+          /* Disable/enable error reporting level.  Takes a single
+             Word arg which is the delta to this thread's error
+             disablement indicator.  Hence 1 disables or further
+             disables errors, and -1 moves back towards enablement.
+             Other values are not allowed. */
+          VG_USERREQ__CHANGE_ERR_DISABLEMENT = 0x1801
    } Vg_ClientRequest;
 
 #if !defined(__GNUC__)
@@ -4018,6 +4025,30 @@ VALGRIND_PRINTF_BACKTRACE(const char *format, ...)
                                VG_USERREQ__MAP_IP_TO_SRCLOC,      \
                                addr, buf64, 0, 0, 0)
 
+/* Disable error reporting for this thread.  Behaves in a stack like
+   way, so you can safely call this multiple times provided that
+   VALGRIND_ENABLE_ERROR_REPORTING is called the same number of times
+   to re-enable reporting.  The first call of this macro disables
+   reporting.  Subsequent calls have no effect except to increase the
+   number of VALGRIND_ENABLE_ERROR_REPORTING calls needed to re-enable
+   reporting.  Child threads do not inherit this setting from their
+   parents -- they are always created with reporting enabled. */
+#define VALGRIND_DISABLE_ERROR_REPORTING                           \
+   {unsigned int _qzz_res;                                         \
+    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                        \
+                               VG_USERREQ__CHANGE_ERR_DISABLEMENT, \
+                               1, 0, 0, 0, 0);                     \
+   }
+
+/* Re-enable error reporting, as per comments on
+   VALGRIND_DISABLE_ERROR_REPORTING. */
+#define VALGRIND_ENABLE_ERROR_REPORTING                            \
+   {unsigned int _qzz_res;                                         \
+    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0,                        \
+                               VG_USERREQ__CHANGE_ERR_DISABLEMENT, \
+                               (-1), 0, 0, 0, 0);                  \
+   }
+
 
 #undef PLAT_x86_darwin
 #undef PLAT_amd64_darwin
index 1e03bfd22c7660083358b1b31f112a16be5f622d..d61230773de5ed7dc6795008f702a9a93b73d2a3 100644 (file)
@@ -72,6 +72,10 @@ EXTRA_DIST = \
        deep_templates.stdout.exp deep_templates.stderr.exp \
        describe-block.stderr.exp describe-block.vgtest \
        doublefree.stderr.exp doublefree.vgtest \
+       err_disable1.vgtest err_disable1.stderr.exp err_disable1.stdout.exp \
+       err_disable2.vgtest err_disable2.stderr.exp err_disable2.stdout.exp \
+       err_disable3.vgtest err_disable3.stderr.exp err_disable3.stdout.exp \
+       err_disable4.vgtest err_disable4.stderr.exp err_disable4.stdout.exp \
        erringfds.stderr.exp erringfds.stdout.exp erringfds.vgtest \
        error_counts.stderr.exp error_counts.vgtest \
        errs1.stderr.exp errs1.vgtest \
@@ -215,6 +219,7 @@ check_PROGRAMS = \
        deep_templates \
        describe-block \
        doublefree error_counts errs1 exitprog execve execve2 erringfds \
+       err_disable1 err_disable2 err_disable3 err_disable4 \
        file_locking \
        fprw fwrite inits inline \
        leak-0 \
@@ -274,6 +279,9 @@ endif
 deep_templates_SOURCES = deep_templates.cpp
 deep_templates_CXXFLAGS        = $(AM_CFLAGS) -O -gstabs
 
+err_disable3_LDADD     = -lpthread
+err_disable4_LDADD     = -lpthread
+
 error_counts_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@
 
 execve_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_NONNULL@
diff --git a/memcheck/tests/err_disable1.c b/memcheck/tests/err_disable1.c
new file mode 100644 (file)
index 0000000..e43dde1
--- /dev/null
@@ -0,0 +1,75 @@
+
+/* Test simple use of the disable/enable macros. */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "../include/valgrind.h"
+
+char* block = NULL;
+
+__attribute__((noinline)) void usechar ( char c )
+{
+   // Spook gcc into believing mysterious bad things are
+   // happening behind its back, and that 'c' is definitely
+   // used in some (unknown) way.
+   __asm__ __volatile__("" : : "r"(c) : "memory","cc");
+}
+
+__attribute__((noinline)) void err ( void )
+{
+   usechar( block[5] );
+}
+
+int main ( void )
+{
+  block = malloc(10);
+  free(block);
+
+  fprintf(stderr, "\n--------- SIMPLE TEST ---------\n\n");
+  fprintf(stderr, "\n--------- enabled (expect 1) ---------\n\n");
+
+  err();
+
+  fprintf(stderr, "\n--------- disabled (expect 0) ---------\n\n");
+  VALGRIND_DISABLE_ERROR_REPORTING;
+
+  err();
+
+  fprintf(stderr, "\n--------- re-enabled (expect 1) ---------\n\n");
+  VALGRIND_ENABLE_ERROR_REPORTING;
+
+  err();
+
+
+
+  fprintf(stderr, "\n--------- MULTI-LEVEL TEST (expect 2) ---------\n\n");
+
+  // 4 times
+  VALGRIND_DISABLE_ERROR_REPORTING;
+  VALGRIND_DISABLE_ERROR_REPORTING;
+  VALGRIND_DISABLE_ERROR_REPORTING;
+  VALGRIND_DISABLE_ERROR_REPORTING; // lev = 4
+
+  // now gradually undo them until an error appears
+  err();  // hidden
+
+  VALGRIND_ENABLE_ERROR_REPORTING; // lev = 3
+  err();  // hidden
+
+  VALGRIND_ENABLE_ERROR_REPORTING; // lev = 2
+  err();  // hidden
+
+  VALGRIND_ENABLE_ERROR_REPORTING; // lev = 1
+  err();  // hidden
+
+  VALGRIND_ENABLE_ERROR_REPORTING; // lev = 0
+  err();  // visible
+
+  VALGRIND_ENABLE_ERROR_REPORTING; // lev = 0 (won't go down further)
+  err();  // visible
+
+  fprintf(stderr, "\n--------- MULTI-LEVEL TEST end ---------\n\n");
+
+  return 0;
+}
diff --git a/memcheck/tests/err_disable1.stderr.exp b/memcheck/tests/err_disable1.stderr.exp
new file mode 100644 (file)
index 0000000..8762bf1
--- /dev/null
@@ -0,0 +1,46 @@
+
+--------- SIMPLE TEST ---------
+
+
+--------- enabled (expect 1) ---------
+
+Invalid read of size 1
+   at 0x........: err (err_disable1.c:21)
+   by 0x........: main (err_disable1.c:32)
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable1.c:27)
+
+
+--------- disabled (expect 0) ---------
+
+
+--------- re-enabled (expect 1) ---------
+
+Invalid read of size 1
+   at 0x........: err (err_disable1.c:21)
+   by 0x........: main (err_disable1.c:42)
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable1.c:27)
+
+
+--------- MULTI-LEVEL TEST (expect 2) ---------
+
+Invalid read of size 1
+   at 0x........: err (err_disable1.c:21)
+   by 0x........: main (err_disable1.c:67)
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable1.c:27)
+
+Invalid read of size 1
+   at 0x........: err (err_disable1.c:21)
+   by 0x........: main (err_disable1.c:70)
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable1.c:27)
+
+
+--------- MULTI-LEVEL TEST end ---------
+
diff --git a/memcheck/tests/err_disable1.vgtest b/memcheck/tests/err_disable1.vgtest
new file mode 100644 (file)
index 0000000..58ee726
--- /dev/null
@@ -0,0 +1,2 @@
+prog: err_disable1
+vgopts: -q
diff --git a/memcheck/tests/err_disable2.c b/memcheck/tests/err_disable2.c
new file mode 100644 (file)
index 0000000..4a68c86
--- /dev/null
@@ -0,0 +1,42 @@
+
+/* Test that we get a complaint if a thread exits with error reporting
+   disabled.  */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "../include/valgrind.h"
+
+char* block = NULL;
+
+__attribute__((noinline)) void usechar ( char c )
+{
+   // Spook gcc into believing mysterious bad things are
+   // happening behind its back, and that 'c' is definitely
+   // used in some (unknown) way.
+   __asm__ __volatile__("" : : "r"(c) : "memory","cc");
+}
+
+__attribute__((noinline)) void err ( void )
+{
+   usechar( block[5] );
+}
+
+int main ( void )
+{
+  block = malloc(10);
+  free(block);
+
+  fprintf(stderr, "\n--------- enabled (expect 1) ---------\n\n");
+
+  err();
+
+  fprintf(stderr, "\n--------- disabled (expect 0) ---------\n\n");
+  VALGRIND_DISABLE_ERROR_REPORTING;
+
+  err();
+
+  fprintf(stderr, "\n--------- exiting (expect complaint) ---------\n\n");
+
+  return 0;
+}
diff --git a/memcheck/tests/err_disable2.stderr.exp b/memcheck/tests/err_disable2.stderr.exp
new file mode 100644 (file)
index 0000000..82cd04f
--- /dev/null
@@ -0,0 +1,19 @@
+
+--------- enabled (expect 1) ---------
+
+Invalid read of size 1
+   at 0x........: err (err_disable2.c:22)
+   by 0x........: main (err_disable2.c:32)
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable2.c:28)
+
+
+--------- disabled (expect 0) ---------
+
+
+--------- exiting (expect complaint) ---------
+
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
diff --git a/memcheck/tests/err_disable2.vgtest b/memcheck/tests/err_disable2.vgtest
new file mode 100644 (file)
index 0000000..0375a53
--- /dev/null
@@ -0,0 +1,2 @@
+prog: err_disable2
+vgopts: -q
diff --git a/memcheck/tests/err_disable3.c b/memcheck/tests/err_disable3.c
new file mode 100644 (file)
index 0000000..53e335b
--- /dev/null
@@ -0,0 +1,63 @@
+
+/* Check that a child thread doesn't inherit its parent's disablement
+   status. */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+#include <pthread.h>
+#include <unistd.h>    // sleep
+
+#include "../include/valgrind.h"
+
+char* block = NULL;
+
+__attribute__((noinline)) void usechar ( char c )
+{
+   // Spook gcc into believing mysterious bad things are
+   // happening behind its back, and that 'c' is definitely
+   // used in some (unknown) way.
+   __asm__ __volatile__("" : : "r"(c) : "memory","cc");
+}
+
+__attribute__((noinline)) void err ( void )
+{
+   usechar( block[5] );
+}
+
+void* child_fn ( void* arg )
+{
+   fprintf(stderr, "\n--------- c: start (expect 1) ---------\n\n");
+   err();
+   fprintf(stderr, "\n--------- c: end ---------\n\n");
+   return NULL;
+}
+
+int main ( void )
+{
+  int r;
+  pthread_t child;
+
+  block = malloc(10);
+  free(block);
+
+  fprintf(stderr, "\n--------- p: disabling errors (expect 0) ---------\n\n");
+
+  VALGRIND_DISABLE_ERROR_REPORTING;
+  err();
+
+  fprintf(stderr, "\n--------- p: creating child ---------\n\n");
+
+  r = pthread_create(&child, NULL, child_fn, NULL);
+  assert(!r);
+  sleep(1); // let the child run first (determinism fix)
+  fprintf(stderr, "\n--------- p: join child ---------\n\n");
+  r = pthread_join(child, NULL);
+  assert(!r);
+
+  fprintf(stderr, "\n--------- p: re_enabled (expect 1) ---------\n\n");
+  VALGRIND_ENABLE_ERROR_REPORTING;
+  err();
+
+  return 0;
+}
diff --git a/memcheck/tests/err_disable3.stderr.exp b/memcheck/tests/err_disable3.stderr.exp
new file mode 100644 (file)
index 0000000..90704ac
--- /dev/null
@@ -0,0 +1,36 @@
+
+--------- p: disabling errors (expect 0) ---------
+
+
+--------- p: creating child ---------
+
+
+--------- c: start (expect 1) ---------
+
+Thread 2:
+Invalid read of size 1
+   at 0x........: err (err_disable3.c:25)
+   by 0x........: child_fn (err_disable3.c:31)
+   by 0x........: start_thread (pthread_create.c:300)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable3.c:42)
+
+
+--------- c: end ---------
+
+
+--------- p: join child ---------
+
+
+--------- p: re_enabled (expect 1) ---------
+
+Thread 1:
+Invalid read of size 1
+   at 0x........: err (err_disable3.c:25)
+   by 0x........: main (err_disable3.c:60)
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable3.c:42)
+
diff --git a/memcheck/tests/err_disable3.vgtest b/memcheck/tests/err_disable3.vgtest
new file mode 100644 (file)
index 0000000..6b99826
--- /dev/null
@@ -0,0 +1,2 @@
+prog: err_disable3
+vgopts: -q
diff --git a/memcheck/tests/err_disable4.c b/memcheck/tests/err_disable4.c
new file mode 100644 (file)
index 0000000..39d4e22
--- /dev/null
@@ -0,0 +1,118 @@
+
+/* Check that recycling thread slots doesn't cause new threads to
+   inherit the disablement status of the previous thread to occupy
+   that slot.
+
+   1. Create N threads, disable error reporting in them, and get them
+      all to exit (join with them).  That creates N thread slots that
+      were vacated by threads with error reporting disabled.  There
+      should be N complaints about threads exiting with errors
+      disabled.
+
+   2. Create N new threads and get them to wait at a barrier.
+
+   3. Let them all go past the barrier and call err().  There
+      should be N resulting error reports.
+
+   4. Join with the N threads.
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+#include <pthread.h>
+#include <semaphore.h>
+
+#include "../include/valgrind.h"
+
+char* block = NULL;
+sem_t sem;
+
+__attribute__((noinline)) void usechar ( char c )
+{
+   // Spook gcc into believing mysterious bad things are
+   // happening behind its back, and that 'c' is definitely
+   // used in some (unknown) way.
+   __asm__ __volatile__("" : : "r"(c) : "memory","cc");
+}
+
+__attribute__((noinline)) void err ( void )
+{
+   usechar( block[5] );
+}
+
+void* child_fn_1 ( void* arg )
+{
+   // Disable error reporting, then wait to exit
+   VALGRIND_DISABLE_ERROR_REPORTING;
+   int r = sem_wait(&sem);  assert(!r);
+   return NULL;
+}
+
+void* child_fn_2 ( void* arg )
+{
+   // make an error, then wait to exit
+   err();
+   int r = sem_wait(&sem);  assert(!r);
+   return NULL;
+}
+
+#define NTHREADS 498 // VG_N_THREADS - 2
+
+int main ( void )
+{
+  int r, i;
+  pthread_t child[NTHREADS];
+
+  block = malloc(10);
+  free(block);
+
+  // part 1
+  fprintf(stderr, "\n-------- Letting %d threads exit "
+                  "w/ errs disabled ------\n\n",
+          NTHREADS);
+
+  // set up the semaphore
+  r = sem_init(&sem, 0, 0);  assert(!r);
+
+  // create N threads to do child_fn_1 ...
+  for (i = 0; i < NTHREADS; i++) {
+     r = pthread_create(&child[i], NULL, child_fn_1, NULL);
+     assert(!r);
+  }
+
+  // let them all exit
+  for (i = 0; i < NTHREADS; i++) {
+     r = sem_post(&sem);  assert(!r);
+  }
+
+  // join
+  for (i = 0; i < NTHREADS; i++) {
+     r = pthread_join(child[i], NULL);  assert(!r);
+  }
+
+  // part 2
+
+  fprintf(stderr, "\n-------- Letting %d threads make an error "
+                  "------\n\n",
+          NTHREADS);
+  // semaphore is already back at zero
+
+  // create N threads to do child_fn_2 ...
+  for (i = 0; i < NTHREADS; i++) {
+     r = pthread_create(&child[i], NULL, child_fn_2, NULL);
+     assert(!r);
+  }
+
+  // let them all exit
+  for (i = 0; i < NTHREADS; i++) {
+     r = sem_post(&sem);  assert(!r);
+  }
+
+  // join
+  for (i = 0; i < NTHREADS; i++) {
+     r = pthread_join(child[i], NULL);  assert(!r);
+  }
+
+  return 0;
+}
diff --git a/memcheck/tests/err_disable4.stderr.exp b/memcheck/tests/err_disable4.stderr.exp
new file mode 100644 (file)
index 0000000..70692f1
--- /dev/null
@@ -0,0 +1,2503 @@
+
+-------- Letting 498 threads exit w/ errs disabled ------
+
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+WARNING: exiting thread has error reporting disabled.
+WARNING: possibly as a result of some mistake in the use
+WARNING: of the VALGRIND_DISABLE_ERROR_REPORTING macros.
+
+-------- Letting 498 threads make an error ------
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+Thread x:
+Invalid read of size 1
+   at 0x........: err (err_disable4.c:41)
+   by 0x........: child_fn_2 (err_disable4.c:55)
+   by 0x........: start_thread (in /...libpthread...)
+   by 0x........: ???
+ Address 0x........ is 5 bytes inside a block of size 10 free'd
+   at 0x........: free (vg_replace_malloc.c:...)
+   by 0x........: main (err_disable4.c:68)
+
+
+More than 100 errors detected.  Subsequent errors
+will still be recorded, but in less detail than before.
diff --git a/memcheck/tests/err_disable4.vgtest b/memcheck/tests/err_disable4.vgtest
new file mode 100644 (file)
index 0000000..eddcbf4
--- /dev/null
@@ -0,0 +1,6 @@
+prog: err_disable4
+vgopts: -q
+stderr_filter: ../../helgrind/tests/filter_stderr
+## This is so as to get rid of the "Thread #" lines, which
+## otherwise perturb the output due to differences in 
+## thread scheduling between runs.
index 4aad81fccaff08b4fae4385ee7b86a137acb92fc..000231ce65b71169b105601415bf56542ad4950a 100644 (file)
 /* Include Valgrind magic macros for writing wrappers. */
 #include "../memcheck/memcheck.h"
 
+/* Include macros for VALGRIND_{DIS,EN}ABLE_ERROR_REPORTING.
+   This is somewhat experimental and hence disable-able, by
+   setting cONFIG_DER to zero. */
+#include "../include/valgrind.h"
+
+#define cONFIG_DER  1   /* set to 0 to disable */
+
 
 /*------------------------------------------------------------*/
 /*--- Connect to MPI library                               ---*/
@@ -1055,7 +1062,9 @@ int generic_Send(void *buf, int count, MPI_Datatype datatype,
    VALGRIND_GET_ORIG_FN(fn);
    before("{,B,S,R}Send");
    check_mem_is_defined(buf, count, datatype);
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_6W(err, fn, buf,count,datatype,dest,tag,comm);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    after("{,B,S,R}Send", err);
    return err;
 }
@@ -1095,7 +1104,9 @@ int WRAPPER_FOR(PMPI_Recv)(void *buf, int count, MPI_Datatype datatype,
       status = &fake_status;
    check_mem_is_addressable(buf, count, datatype);
    check_mem_is_addressable_untyped(status, sizeof(*status));
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_7W(err, fn, buf,count,datatype,source,tag,comm,status);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    if (err == MPI_SUCCESS && count_from_Status(&recv_count,datatype,status)) {
       make_mem_defined_if_addressable(buf, recv_count, datatype);
    }
@@ -1115,7 +1126,9 @@ int WRAPPER_FOR(PMPI_Get_count)(MPI_Status* status,
    VALGRIND_GET_ORIG_FN(fn);
    before("Get_count");
    check_mem_is_defined_untyped(status, sizeof(*status));
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_WWW(err, fn, status,ty,count);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    after("Get_count", err);
    return err;
 }
@@ -1364,7 +1377,9 @@ int generic_Isend(void *buf, int count, MPI_Datatype datatype,
    before("{,B,S,R}Isend");
    check_mem_is_defined(buf, count, datatype);
    check_mem_is_addressable_untyped(request, sizeof(*request));
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_7W(err, fn, buf,count,datatype,dest,tag,comm,request);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    make_mem_defined_if_addressable_if_success_untyped(err, request, sizeof(*request));
    after("{,B,S,R}Isend", err);
    return err;
@@ -1407,7 +1422,9 @@ int WRAPPER_FOR(PMPI_Irecv)( void* buf, int count, MPI_Datatype datatype,
    before("Irecv");
    check_mem_is_addressable(buf, count, datatype);
    check_mem_is_addressable_untyped(request, sizeof(*request));
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_7W(err, fn, buf,count,datatype,source,tag,comm,request);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    if (err == MPI_SUCCESS) {
       make_mem_defined_if_addressable_untyped(request, sizeof(*request));
       add_shadow_Request( *request, buf,count,datatype );
@@ -1436,7 +1453,9 @@ int WRAPPER_FOR(PMPI_Wait)( MPI_Request* request,
    check_mem_is_addressable_untyped(status, sizeof(MPI_Status));
    check_mem_is_defined_untyped(request, sizeof(MPI_Request));
    request_before = *request;
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_WW(err, fn, request,status);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    if (err == MPI_SUCCESS) {
       maybe_complete(False/*err in status?*/, 
                      request_before, *request, status);
@@ -1467,7 +1486,9 @@ int WRAPPER_FOR(PMPI_Waitany)( int count,
       check_mem_is_defined_untyped(&requests[i], sizeof(MPI_Request));
    }
    requests_before = clone_Request_array( count, requests );
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_WWWW(err, fn, count,requests,index,status);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    if (err == MPI_SUCCESS && *index >= 0 && *index < count) {
       maybe_complete(False/*err in status?*/, 
                      requests_before[*index], requests[*index], status);
@@ -1500,7 +1521,9 @@ int WRAPPER_FOR(PMPI_Waitall)( int count,
       check_mem_is_defined_untyped(&requests[i], sizeof(MPI_Request));
    }
    requests_before = clone_Request_array( count, requests );
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_WWW(err, fn, count,requests,statuses);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    if (err == MPI_SUCCESS /*complete success*/
        || err == MPI_ERR_IN_STATUS /* partial success */) {
       Bool e_i_s = err == MPI_ERR_IN_STATUS;
@@ -1536,7 +1559,9 @@ int WRAPPER_FOR(PMPI_Test)( MPI_Request* request, int* flag,
    check_mem_is_addressable_untyped(flag, sizeof(int));
    check_mem_is_defined_untyped(request, sizeof(MPI_Request));
    request_before = *request;
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_WWW(err, fn, request,flag,status);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    if (err == MPI_SUCCESS && *flag) {
       maybe_complete(False/*err in status?*/, 
                      request_before, *request, status);
@@ -1568,7 +1593,9 @@ int WRAPPER_FOR(PMPI_Testall)( int count, MPI_Request* requests,
       check_mem_is_defined_untyped(&requests[i], sizeof(MPI_Request));
    }
    requests_before = clone_Request_array( count, requests );
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_WWWW(err, fn, count,requests,flag,statuses);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    /* Urk.  Is the following "if (...)" really right?  I don't know. */
    if (*flag
        && (err == MPI_SUCCESS /*complete success*/
@@ -1606,7 +1633,9 @@ int WRAPPER_FOR(PMPI_Iprobe)(int source, int tag,
       status = &fake_status;
    check_mem_is_addressable_untyped(flag, sizeof(*flag));
    check_mem_is_addressable_untyped(status, sizeof(*status));
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_5W(err, fn, source,tag,comm,flag,status);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    if (err == MPI_SUCCESS) {
       make_mem_defined_if_addressable_untyped(flag, sizeof(*flag));
       if (*flag)
@@ -1630,7 +1659,9 @@ int WRAPPER_FOR(PMPI_Probe)(int source, int tag,
    if (isMSI(status))
       status = &fake_status;
    check_mem_is_addressable_untyped(status, sizeof(*status));
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_WWWW(err, fn, source,tag,comm,status);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    make_mem_defined_if_addressable_if_success_untyped(err, status, sizeof(*status));
    after("Probe", err);
    return err;
@@ -1649,7 +1680,9 @@ int WRAPPER_FOR(PMPI_Cancel)(MPI_Request* request)
    before("Cancel");
    check_mem_is_addressable_untyped(request, sizeof(*request));
    tmp = *request;
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_W(err, fn, request);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    if (err == MPI_SUCCESS)
       delete_shadow_Request(tmp);
    after("Cancel", err);
@@ -1686,9 +1719,11 @@ int WRAPPER_FOR(PMPI_Sendrecv)(
    check_mem_is_defined(sendbuf, sendcount, sendtype);
    check_mem_is_addressable(recvbuf, recvcount, recvtype);
    check_mem_is_addressable_untyped(status, sizeof(*status));
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_12W(err, fn, sendbuf,sendcount,sendtype,dest,sendtag,
                           recvbuf,recvcount,recvtype,source,recvtag,
                           comm,status);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    if (err == MPI_SUCCESS 
        && count_from_Status(&recvcount_actual,recvtype,status)) {
       make_mem_defined_if_addressable(recvbuf, recvcount_actual, recvtype);
@@ -1725,7 +1760,9 @@ int WRAPPER_FOR(PMPI_Type_commit)( MPI_Datatype* ty )
    VALGRIND_GET_ORIG_FN(fn);
    before("Type_commit");
    check_mem_is_defined_untyped(ty, sizeof(*ty));
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_W(err, fn, ty);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    after("Type_commit", err);
    return err;
 }
@@ -1738,7 +1775,9 @@ int WRAPPER_FOR(PMPI_Type_free)( MPI_Datatype* ty )
    VALGRIND_GET_ORIG_FN(fn);
    before("Type_free");
    check_mem_is_defined_untyped(ty, sizeof(*ty));
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_W(err, fn, ty);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    after("Type_free", err);
    return err;
 }
@@ -1783,7 +1822,9 @@ int WRAPPER_FOR(PMPI_Pack)( void* inbuf, int incount, MPI_Datatype datatype,
       );
    }
 
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_7W(err, fn, inbuf,incount,datatype, outbuf,outsize,position, comm);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
 
    if (err == MPI_SUCCESS && (*position) > position_ORIG) {
       /* paint output */
@@ -1830,7 +1871,9 @@ int WRAPPER_FOR(PMPI_Unpack)( void* inbuf, int insize, int* position,
       );
    }
 
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_7W(err, fn, inbuf,insize,position, outbuf,outcount,datatype, comm);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
 
    if (err == MPI_SUCCESS && (*position) > position_ORIG) {
       /* recheck input more carefully */
@@ -1875,7 +1918,9 @@ int WRAPPER_FOR(PMPI_Bcast)(void *buffer, int count,
    } else {
       check_mem_is_addressable(buffer, count, datatype);
    }
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_5W(err, fn, buffer,count,datatype,root,comm);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    make_mem_defined_if_addressable_if_success(err, buffer, count, datatype);
    after("Bcast", err);
    return err; 
@@ -1914,9 +1959,11 @@ int WRAPPER_FOR(PMPI_Gather)(
    check_mem_is_defined(sendbuf, sendcount, sendtype);
    if (me == root)
       check_mem_is_addressable(recvbuf, recvcount * sz, recvtype);
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_8W(err, fn, sendbuf,sendcount,sendtype,
                          recvbuf,recvcount,recvtype,
                          root,comm);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    if (me == root)
       make_mem_defined_if_addressable_if_success(err, recvbuf, recvcount * sz, recvtype);
    after("Gather", err);
@@ -1948,9 +1995,11 @@ int WRAPPER_FOR(PMPI_Scatter)(
    check_mem_is_addressable(recvbuf, recvcount, recvtype);
    if (me == root)
       check_mem_is_defined(sendbuf, sendcount * sz, sendtype);
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_8W(err, fn, sendbuf,sendcount,sendtype,
                          recvbuf,recvcount,recvtype,
                          root,comm);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    make_mem_defined_if_addressable_if_success(err, recvbuf, recvcount, recvtype);
    after("Scatter", err);
    return err;
@@ -1979,9 +2028,11 @@ int WRAPPER_FOR(PMPI_Alltoall)(
    sz = comm_size(comm);
    check_mem_is_defined(sendbuf, sendcount * sz, sendtype);
    check_mem_is_addressable(recvbuf, recvcount * sz, recvtype);
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_7W(err, fn, sendbuf,sendcount,sendtype,
                          recvbuf,recvcount,recvtype,
                          comm);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    make_mem_defined_if_addressable_if_success(err, recvbuf, recvcount * sz, recvtype);
    after("Alltoall", err);
    return err;
@@ -2012,7 +2063,9 @@ int WRAPPER_FOR(PMPI_Reduce)(void *sendbuf, void *recvbuf,
    check_mem_is_defined(sendbuf, count, datatype);
    if (i_am_root)
       check_mem_is_addressable(recvbuf, count, datatype);
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_7W(err, fn, sendbuf,recvbuf,count,datatype,op,root,comm);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    if (i_am_root)
       make_mem_defined_if_addressable_if_success(err, recvbuf, count, datatype);
    after("Reduce", err);
@@ -2035,7 +2088,9 @@ int WRAPPER_FOR(PMPI_Allreduce)(void *sendbuf, void *recvbuf,
    before("Allreduce");
    check_mem_is_defined(sendbuf, count, datatype);
    check_mem_is_addressable(recvbuf, count, datatype);
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_6W(err, fn, sendbuf,recvbuf,count,datatype,op,comm);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    make_mem_defined_if_addressable_if_success(err, recvbuf, count, datatype);
    after("Allreduce", err);
    return err;
@@ -2055,7 +2110,9 @@ int WRAPPER_FOR(PMPI_Op_create)( MPI_User_function* function,
    VALGRIND_GET_ORIG_FN(fn);
    before("Op_create");
    check_mem_is_addressable_untyped(op, sizeof(*op));
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_WWW(err, fn, function,commute,op);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    make_mem_defined_if_addressable_if_success_untyped(err, op, sizeof(*op));
    after("Op_create", err);
    return err;
@@ -2080,7 +2137,9 @@ int WRAPPER_FOR(PMPI_Comm_create)(MPI_Comm comm, MPI_Group group,
    int    err;
    VALGRIND_GET_ORIG_FN(fn);
    before("Comm_create");
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_WWW(err, fn, comm,group,newcomm);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    after("Comm_create", err);
    return err;
 }
@@ -2093,7 +2152,9 @@ int WRAPPER_FOR(PMPI_Comm_dup)(MPI_Comm comm, MPI_Comm* newcomm)
    int    err;
    VALGRIND_GET_ORIG_FN(fn);
    before("Comm_dup");
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_WW(err, fn, comm,newcomm);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    after("Comm_dup", err);
    return err;
 }
@@ -2106,7 +2167,9 @@ int WRAPPER_FOR(PMPI_Comm_free)(MPI_Comm* comm)
    int    err;
    VALGRIND_GET_ORIG_FN(fn);
    before("Comm_free");
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_W(err, fn, comm);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    after("Comm_free", err);
    return err;
 }
@@ -2120,7 +2183,9 @@ int WRAPPER_FOR(PMPI_Comm_rank)(MPI_Comm comm, int *rank)
    VALGRIND_GET_ORIG_FN(fn);
    before("Comm_rank");
    check_mem_is_addressable_untyped(rank, sizeof(*rank));
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_WW(err, fn, comm,rank);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    make_mem_defined_if_addressable_if_success_untyped(err, rank, sizeof(*rank));
    after("Comm_rank", err);
    return err;
@@ -2135,7 +2200,9 @@ int WRAPPER_FOR(PMPI_Comm_size)(MPI_Comm comm, int *size)
    VALGRIND_GET_ORIG_FN(fn);
    before("Comm_size");
    check_mem_is_addressable_untyped(size, sizeof(*size));
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_WW(err, fn, comm,size);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    make_mem_defined_if_addressable_if_success_untyped(err, size, sizeof(*size));
    after("Comm_size", err);
    return err;
@@ -2165,7 +2232,9 @@ int WRAPPER_FOR(PMPI_Error_string)( int errorcode, char* string,
    before("Error_string");
    check_mem_is_addressable_untyped(resultlen, sizeof(int));
    check_mem_is_addressable_untyped(string, MPI_MAX_ERROR_STRING);
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_WWW(err, fn, errorcode,string,resultlen);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    /* Don't bother to paint the result; we assume the real function
       will have filled it with defined characters :-) */
    after("Error_string", err);
@@ -2193,7 +2262,9 @@ long WRAPPER_FOR(PMPI_Init)(int *argc, char ***argv)
    if (argc && argv) {
       check_mem_is_defined_untyped(*argv, *argc * sizeof(char**));
    }
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_WW(err, fn, argc,argv);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    after("Init", err);
    if (opt_initkludge)
       return (long)(void*)&mpiwrap_walk_type_EXTERNALLY_VISIBLE;
@@ -2209,7 +2280,9 @@ int WRAPPER_FOR(PMPI_Initialized)(int* flag)
    VALGRIND_GET_ORIG_FN(fn);
    before("Initialized");
    check_mem_is_addressable_untyped(flag, sizeof(int));
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_W(err, fn, flag);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    make_mem_defined_if_addressable_if_success_untyped(err, flag, sizeof(int));
    after("Initialized", err);
    return err;
@@ -2222,7 +2295,9 @@ int WRAPPER_FOR(PMPI_Finalize)(void)
    int    err;
    VALGRIND_GET_ORIG_FN(fn);
    before("Finalize");
+   if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;
    CALL_FN_W_v(err, fn);
+   if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;
    after("Finalize", err);
    return err;
 }
@@ -2257,7 +2332,9 @@ int WRAPPER_FOR(PMPI_Finalize)(void)
    UWord WRAPPER_FOR(PMPI_##basename)( void )                     \
    {                                                              \
       DEFAULT_WRAPPER_PREAMBLE(basename)                          \
+      if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;           \
       CALL_FN_W_v(res, fn);                                       \
+      if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;            \
       return res;                                                 \
    }
 
@@ -2265,7 +2342,9 @@ int WRAPPER_FOR(PMPI_Finalize)(void)
    UWord WRAPPER_FOR(PMPI_##basename)( UWord a1 )                 \
    {                                                              \
       DEFAULT_WRAPPER_PREAMBLE(basename)                          \
+      if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;           \
       CALL_FN_W_W(res, fn, a1);                                   \
+      if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;            \
       return res;                                                 \
    }
 
@@ -2273,7 +2352,9 @@ int WRAPPER_FOR(PMPI_Finalize)(void)
    UWord WRAPPER_FOR(PMPI_##basename)( UWord a1, UWord a2 )       \
    {                                                              \
       DEFAULT_WRAPPER_PREAMBLE(basename)                          \
+      if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;           \
       CALL_FN_W_WW(res, fn, a1,a2);                               \
+      if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;            \
       return res;                                                 \
    }
 
@@ -2282,7 +2363,9 @@ int WRAPPER_FOR(PMPI_Finalize)(void)
       ( UWord a1, UWord a2, UWord a3 )                            \
    {                                                              \
       DEFAULT_WRAPPER_PREAMBLE(basename)                          \
+      if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;           \
       CALL_FN_W_WWW(res, fn, a1,a2,a3);                           \
+      if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;            \
       return res;                                                 \
    }
 
@@ -2291,7 +2374,9 @@ int WRAPPER_FOR(PMPI_Finalize)(void)
       ( UWord a1, UWord a2, UWord a3, UWord a4 )                  \
    {                                                              \
       DEFAULT_WRAPPER_PREAMBLE(basename)                          \
+      if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;           \
       CALL_FN_W_WWWW(res, fn, a1,a2,a3,a4);                       \
+      if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;            \
       return res;                                                 \
    }
 
@@ -2300,7 +2385,9 @@ int WRAPPER_FOR(PMPI_Finalize)(void)
       ( UWord a1, UWord a2, UWord a3, UWord a4, UWord a5 )        \
    {                                                              \
       DEFAULT_WRAPPER_PREAMBLE(basename)                          \
+      if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;           \
       CALL_FN_W_5W(res, fn, a1,a2,a3,a4,a5);                      \
+      if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;            \
       return res;                                                 \
    }
 
@@ -2310,7 +2397,9 @@ int WRAPPER_FOR(PMPI_Finalize)(void)
         UWord a6 )                                                \
    {                                                              \
       DEFAULT_WRAPPER_PREAMBLE(basename)                          \
+      if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;           \
       CALL_FN_W_6W(res, fn, a1,a2,a3,a4,a5,a6);                   \
+      if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;            \
       return res;                                                 \
    }
 
@@ -2320,7 +2409,9 @@ int WRAPPER_FOR(PMPI_Finalize)(void)
         UWord a6, UWord a7 )                                      \
    {                                                              \
       DEFAULT_WRAPPER_PREAMBLE(basename)                          \
+      if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;           \
       CALL_FN_W_7W(res, fn, a1,a2,a3,a4,a5,a6,a7);                \
+      if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;            \
       return res;                                                 \
    }
 
@@ -2330,7 +2421,9 @@ int WRAPPER_FOR(PMPI_Finalize)(void)
         UWord a6, UWord a7, UWord a8 )                            \
    {                                                              \
       DEFAULT_WRAPPER_PREAMBLE(basename)                          \
+      if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;           \
       CALL_FN_W_8W(res, fn, a1,a2,a3,a4,a5,a6,a7,a8);             \
+      if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;            \
       return res;                                                 \
    }
 
@@ -2340,7 +2433,9 @@ int WRAPPER_FOR(PMPI_Finalize)(void)
         UWord a6, UWord a7, UWord a8, UWord a9 )                  \
    {                                                              \
       DEFAULT_WRAPPER_PREAMBLE(basename)                          \
+      if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;           \
       CALL_FN_W_9W(res, fn, a1,a2,a3,a4,a5,a6,a7,a8,a9);          \
+      if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;            \
       return res;                                                 \
    }
 
@@ -2350,7 +2445,9 @@ int WRAPPER_FOR(PMPI_Finalize)(void)
         UWord a6, UWord a7, UWord a8, UWord a9, UWord a10 )       \
    {                                                              \
       DEFAULT_WRAPPER_PREAMBLE(basename)                          \
+      if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;           \
       CALL_FN_W_10W(res, fn, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);     \
+      if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;            \
       return res;                                                 \
    }
 
@@ -2361,8 +2458,10 @@ int WRAPPER_FOR(PMPI_Finalize)(void)
         UWord a11, UWord a12 )                                    \
    {                                                              \
       DEFAULT_WRAPPER_PREAMBLE(basename)                          \
+      if (cONFIG_DER) VALGRIND_DISABLE_ERROR_REPORTING;           \
       CALL_FN_W_12W(res, fn, a1,a2,a3,a4,a5,a6,                   \
                              a7,a8,a9,a10,a11,a12);               \
+      if (cONFIG_DER) VALGRIND_ENABLE_ERROR_REPORTING;            \
       return res;                                                 \
    }