|
From: <sv...@va...> - 2009-04-22 19:15:54
|
Author: bart
Date: 2009-04-22 20:15:50 +0100 (Wed, 22 Apr 2009)
New Revision: 9579
Log:
Merged r9577:9578 from trunk to here (fixes #189763).
Modified:
branches/VALGRIND_3_4_BRANCH/drd/drd_pthread_intercepts.c
Modified: branches/VALGRIND_3_4_BRANCH/drd/drd_pthread_intercepts.c
===================================================================
--- branches/VALGRIND_3_4_BRANCH/drd/drd_pthread_intercepts.c 2009-04-22 18:59:50 UTC (rev 9578)
+++ branches/VALGRIND_3_4_BRANCH/drd/drd_pthread_intercepts.c 2009-04-22 19:15:50 UTC (rev 9579)
@@ -260,6 +260,24 @@
}
+
+/*
+ * Note: as of today there exist three different versions of pthread_create:
+ * - pthread_create@GLIBC_2.0
+ * - pthread_create@@GLIBC_2.1
+ * - pthread_create@@GLIBC_2.2.5
+ * As an example, in libpthread-2.3.4 both pthread_create@GLIBC_2.0 and
+ * pthread_create@@GLIBC_2.1 are defined, while in libpthread-2.9 all three
+ * versions have been implemented. In any glibc version where more than one
+ * pthread_create function has been implemented, older versions call the
+ * newer versions. Or: the pthread_create* wrapper defined below can be
+ * called recursively. Any code in this wrapper should take this in account.
+ * As an example, it is not safe to invoke the DRD_STOP_RECORDING
+ * / DRD_START_RECORDING client requests from the pthread_create wrapper.
+ * See also the implementation of pthread_create@GLIBC_2.0 in
+ * glibc-2.9/nptl/pthread_create.c.
+ */
+
// pthread_create
PTH_FUNC(int, pthreadZucreateZa, // pthread_create*
pthread_t *thread, const pthread_attr_t *attr,
@@ -292,12 +310,7 @@
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);
|