From: Bart Van Assche Date: Thu, 23 Apr 2009 17:12:39 +0000 (+0000) Subject: Made DRD_(thread_set_pthreadid)() idempotent. X-Git-Tag: svn/VALGRIND_3_5_0~796 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9a196291ecc6705b4a048639094d24b6928923df;p=thirdparty%2Fvalgrind.git Made DRD_(thread_set_pthreadid)() idempotent. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9590 --- diff --git a/drd/drd_thread.c b/drd/drd_thread.c index 2b692b143d..cf22859a53 100644 --- a/drd/drd_thread.c +++ b/drd/drd_thread.c @@ -451,12 +451,19 @@ void DRD_(thread_pre_cancel)(const DrdThreadId tid) DRD_(g_threadinfo)[tid].synchr_nesting = 0; } -/** Store the POSIX thread ID for the specified thread. */ +/** + * Store the POSIX thread ID for the specified thread. + * + * @note This function can be called two times for the same thread -- see also + * the comment block preceding the pthread_create() wrapper in + * drd_pthread_intercepts.c. + */ void DRD_(thread_set_pthreadid)(const DrdThreadId tid, const PThreadId ptid) { tl_assert(0 <= (int)tid && tid < DRD_N_THREADS && tid != DRD_INVALID_THREADID); - tl_assert(DRD_(g_threadinfo)[tid].pt_threadid == INVALID_POSIX_THREADID); + tl_assert(DRD_(g_threadinfo)[tid].pt_threadid == INVALID_POSIX_THREADID + || DRD_(g_threadinfo)[tid].pt_threadid == ptid); tl_assert(ptid != INVALID_POSIX_THREADID); DRD_(g_threadinfo)[tid].posix_thread_exists = True; DRD_(g_threadinfo)[tid].pt_threadid = ptid;