|
From: <sv...@va...> - 2009-04-23 17:12:43
|
Author: bart
Date: 2009-04-23 18:12:39 +0100 (Thu, 23 Apr 2009)
New Revision: 9590
Log:
Made DRD_(thread_set_pthreadid)() idempotent.
Modified:
trunk/drd/drd_thread.c
Modified: trunk/drd/drd_thread.c
===================================================================
--- trunk/drd/drd_thread.c 2009-04-23 15:42:27 UTC (rev 9589)
+++ trunk/drd/drd_thread.c 2009-04-23 17:12:39 UTC (rev 9590)
@@ -451,12 +451,19 @@
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;
|