Made DRD_(thread_set_pthreadid)() idempotent.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@9590 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/drd/drd_thread.c b/drd/drd_thread.c
index 2b692b1..cf22859 100644
--- a/drd/drd_thread.c
+++ b/drd/drd_thread.c
@@ -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;