diff options
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | coregrind/m_errormgr.c | 11 | ||||
-rw-r--r-- | coregrind/m_scheduler/scheduler.c | 17 | ||||
-rw-r--r-- | coregrind/m_syswrap/syswrap-darwin.c | 32 | ||||
-rw-r--r-- | coregrind/m_syswrap/syswrap-linux.c | 31 | ||||
-rw-r--r-- | coregrind/pub_core_threadstate.h | 8 | ||||
-rw-r--r-- | include/valgrind.h | 33 | ||||
-rw-r--r-- | memcheck/tests/Makefile.am | 8 | ||||
-rw-r--r-- | memcheck/tests/err_disable1.c | 75 | ||||
-rw-r--r-- | memcheck/tests/err_disable1.stderr.exp | 46 | ||||
-rw-r--r-- | memcheck/tests/err_disable1.vgtest | 2 | ||||
-rw-r--r-- | memcheck/tests/err_disable2.c | 42 | ||||
-rw-r--r-- | memcheck/tests/err_disable2.stderr.exp | 19 | ||||
-rw-r--r-- | memcheck/tests/err_disable2.vgtest | 2 | ||||
-rw-r--r-- | memcheck/tests/err_disable3.c | 63 | ||||
-rw-r--r-- | memcheck/tests/err_disable3.stderr.exp | 36 | ||||
-rw-r--r-- | memcheck/tests/err_disable3.vgtest | 2 | ||||
-rw-r--r-- | memcheck/tests/err_disable4.c | 118 | ||||
-rw-r--r-- | memcheck/tests/err_disable4.stderr.exp | 2503 | ||||
-rw-r--r-- | memcheck/tests/err_disable4.vgtest | 6 | ||||
-rw-r--r-- | mpi/libmpiwrap.c | 99 |
21 files changed, 3149 insertions, 7 deletions
@@ -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; \ } |