summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS3
-rw-r--r--coregrind/m_errormgr.c11
-rw-r--r--coregrind/m_scheduler/scheduler.c17
-rw-r--r--coregrind/m_syswrap/syswrap-darwin.c32
-rw-r--r--coregrind/m_syswrap/syswrap-linux.c31
-rw-r--r--coregrind/pub_core_threadstate.h8
-rw-r--r--include/valgrind.h33
-rw-r--r--memcheck/tests/Makefile.am8
-rw-r--r--memcheck/tests/err_disable1.c75
-rw-r--r--memcheck/tests/err_disable1.stderr.exp46
-rw-r--r--memcheck/tests/err_disable1.vgtest2
-rw-r--r--memcheck/tests/err_disable2.c42
-rw-r--r--memcheck/tests/err_disable2.stderr.exp19
-rw-r--r--memcheck/tests/err_disable2.vgtest2
-rw-r--r--memcheck/tests/err_disable3.c63
-rw-r--r--memcheck/tests/err_disable3.stderr.exp36
-rw-r--r--memcheck/tests/err_disable3.vgtest2
-rw-r--r--memcheck/tests/err_disable4.c118
-rw-r--r--memcheck/tests/err_disable4.stderr.exp2503
-rw-r--r--memcheck/tests/err_disable4.vgtest6
-rw-r--r--mpi/libmpiwrap.c99
21 files changed, 3149 insertions, 7 deletions
diff --git a/NEWS b/NEWS
index 2b336b5a..f43f8d37 100644
--- 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.
diff --git a/coregrind/m_errormgr.c b/coregrind/m_errormgr.c
index 57a323f1..89e7d466 100644
--- a/coregrind/m_errormgr.c
+++ b/coregrind/m_errormgr.c
@@ -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 );
diff --git a/coregrind/m_scheduler/scheduler.c b/coregrind/m_scheduler/scheduler.c
index df6c4189..6d708c58 100644
--- a/coregrind/m_scheduler/scheduler.c
+++ b/coregrind/m_scheduler/scheduler.c
@@ -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:
diff --git a/coregrind/m_syswrap/syswrap-darwin.c b/coregrind/m_syswrap/syswrap-darwin.c
index 463b33fb..eb68bc33 100644
--- a/coregrind/m_syswrap/syswrap-darwin.c
+++ b/coregrind/m_syswrap/syswrap-darwin.c
@@ -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);
diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c
index 57859d30..c09aa53d 100644
--- a/coregrind/m_syswrap/syswrap-linux.c
+++ b/coregrind/m_syswrap/syswrap-linux.c
@@ -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);
diff --git a/coregrind/pub_core_threadstate.h b/coregrind/pub_core_threadstate.h
index ba9404c7..31c66e3b 100644
--- a/coregrind/pub_core_threadstate.h
+++ b/coregrind/pub_core_threadstate.h
@@ -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);
diff --git a/include/valgrind.h b/include/valgrind.h
index da3b8a1c..22b8a617 100644
--- a/include/valgrind.h
+++ b/include/valgrind.h
@@ -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
diff --git a/memcheck/tests/Makefile.am b/memcheck/tests/Makefile.am
index 1e03bfd2..d6123077 100644
--- a/memcheck/tests/Makefile.am
+++ b/memcheck/tests/Makefile.am
@@ -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
index 00000000..e43dde1f
--- /dev/null
+++ b/memcheck/tests/err_disable1.c
@@ -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
index 00000000..8762bf1d
--- /dev/null
+++ b/memcheck/tests/err_disable1.stderr.exp
@@ -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
index 00000000..58ee7264
--- /dev/null
+++ b/memcheck/tests/err_disable1.vgtest
@@ -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
index 00000000..4a68c869
--- /dev/null
+++ b/memcheck/tests/err_disable2.c
@@ -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
index 00000000..82cd04f4
--- /dev/null
+++ b/memcheck/tests/err_disable2.stderr.exp
@@ -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
index 00000000..0375a531
--- /dev/null
+++ b/memcheck/tests/err_disable2.vgtest
@@ -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
index 00000000..53e335b9
--- /dev/null
+++ b/memcheck/tests/err_disable3.c
@@ -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
index 00000000..90704ac5
--- /dev/null
+++ b/memcheck/tests/err_disable3.stderr.exp
@@ -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
index 00000000..6b998262
--- /dev/null
+++ b/memcheck/tests/err_disable3.vgtest
@@ -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
index 00000000..39d4e22a
--- /dev/null
+++ b/memcheck/tests/err_disable4.c
@@ -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
index 00000000..70692f13
--- /dev/null
+++ b/memcheck/tests/err_disable4.stderr.exp
@@ -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
index 00000000..eddcbf4d
--- /dev/null
+++ b/memcheck/tests/err_disable4.vgtest
@@ -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.
diff --git a/mpi/libmpiwrap.c b/mpi/libmpiwrap.c
index 4aad81fc..000231ce 100644
--- a/mpi/libmpiwrap.c
+++ b/mpi/libmpiwrap.c
@@ -98,6 +98,13 @@
/* 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; \
}