From: Bart Van Assche Date: Fri, 4 Apr 2008 19:10:21 +0000 (+0000) Subject: Suppressed reports about data races during thread creation. X-Git-Tag: svn/VALGRIND_3_4_0~755 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d3dd4188017ae7415af9b2bfbaa8a9179b772da7;p=thirdparty%2Fvalgrind.git Suppressed reports about data races during thread creation. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7843 --- diff --git a/exp-drd/drd_clientreq.c b/exp-drd/drd_clientreq.c index e8c19d1945..481ad17c1a 100644 --- a/exp-drd/drd_clientreq.c +++ b/exp-drd/drd_clientreq.c @@ -140,6 +140,14 @@ static Bool drd_handle_client_request(ThreadId vg_tid, UWord* arg, UWord* ret) drd_stop_tracing_address_range(arg[1], arg[1] + arg[2]); break; + case VG_USERREQ__DRD_STOP_RECORDING: + thread_stop_recording(drd_tid); + break; + + case VG_USERREQ__DRD_START_RECORDING: + thread_start_recording(drd_tid); + break; + case VG_USERREQ__SET_PTHREADID: thread_set_pthreadid(drd_tid, arg[1]); break; diff --git a/exp-drd/drd_clientreq.h b/exp-drd/drd_clientreq.h index 81d8320dc4..46f56e241c 100644 --- a/exp-drd/drd_clientreq.h +++ b/exp-drd/drd_clientreq.h @@ -35,6 +35,12 @@ enum { /* To ask the drd tool to stop tracing accesses to the specified range. */ VG_USERREQ__DRD_STOP_TRACE_ADDR, /* args: Addr, SizeT. */ + /* Let the drd tool stop recording memory accesses in the calling thread. */ + VG_USERREQ__DRD_STOP_RECORDING, + /* args: none. */ + /* Let the drd tool start recording memory accesses in the calling thread. */ + VG_USERREQ__DRD_START_RECORDING, + /* args: none. */ /* Tell the core the pthread_t of the running thread */ VG_USERREQ__SET_PTHREADID, diff --git a/exp-drd/drd_pthread_intercepts.c b/exp-drd/drd_pthread_intercepts.c index aabac05894..2c1b7734da 100644 --- a/exp-drd/drd_pthread_intercepts.c +++ b/exp-drd/drd_pthread_intercepts.c @@ -244,6 +244,7 @@ PTH_FUNC(int, pthreadZucreateZa, // pthread_create* pthread_t *thread, const pthread_attr_t *attr, void *(*start) (void *), void *arg) { + int res; int ret; OrigFn fn; VgPosixThreadArgs vgargs; @@ -270,7 +271,12 @@ PTH_FUNC(int, pthreadZucreateZa, // pthread_create* pthread_cond_init(&vgargs.cond, 0); pthread_mutex_lock(&vgargs.mutex); #endif + /* Suppress NPTL-specific conflicts between creator and created thread. */ + VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__DRD_STOP_RECORDING, + 0, 0, 0, 0, 0); CALL_FN_W_WWWW(ret, fn, thread, attr, vg_thread_wrapper, &vgargs); + VALGRIND_DO_CLIENT_REQUEST(res, -1, VG_USERREQ__DRD_START_RECORDING, + 0, 0, 0, 0, 0); #if 0 pthread_cond_wait(&vgargs.cond, &vgargs.mutex); pthread_mutex_unlock(&vgargs.mutex);