Fix assertion on mark_lock_holder for non-unique NUMERIC_THREAD_ID
authorIvan Maidanski <ivmai@mail.ru>
Fri, 22 Aug 2014 10:54:53 +0000 (14:54 +0400)
committerIvan Maidanski <ivmai@mail.ru>
Fri, 22 Aug 2014 11:06:52 +0000 (15:06 +0400)
* pthread_support.c (GC_acquire_mark_lock): Avoid assertion that
GC_mark_lock_holder != NUMERIC_THREAD_ID(pthread_self()) unless
NUMERIC_THREAD_ID_UNIQUE.
* win32_threads.c (GC_acquire_mark_lock): Likewise.
* win32_threads.c (NUMERIC_THREAD_ID): Add comment.

pthread_support.c
win32_threads.c

index dbdf50b..0689be4 100644 (file)
@@ -1987,7 +1987,9 @@ static pthread_cond_t builder_cv = PTHREAD_COND_INITIALIZER;
 
 GC_INNER void GC_acquire_mark_lock(void)
 {
-    GC_ASSERT(GC_mark_lock_holder != NUMERIC_THREAD_ID(pthread_self()));
+#   ifdef NUMERIC_THREAD_ID_UNIQUE
+      GC_ASSERT(GC_mark_lock_holder != NUMERIC_THREAD_ID(pthread_self()));
+#   endif
     GC_generic_lock(&mark_mutex);
     SET_MARK_LOCK_HOLDER;
 }
index 73ba0ff..2b783f4 100644 (file)
@@ -1733,6 +1733,7 @@ GC_INNER void GC_get_next_stack(char *start, char *limit,
 
 #   ifndef NUMERIC_THREAD_ID
 #     define NUMERIC_THREAD_ID(id) (unsigned long)GC_PTHREAD_PTRVAL(id)
+      /* Id not guaranteed to be unique. */
 #   endif
 
     /* start_mark_threads is the same as in pthread_support.c except    */
@@ -1800,7 +1801,9 @@ GC_INNER void GC_get_next_stack(char *start, char *limit,
 
     GC_INNER void GC_acquire_mark_lock(void)
     {
-      GC_ASSERT(GC_mark_lock_holder != NUMERIC_THREAD_ID(pthread_self()));
+#     ifdef NUMERIC_THREAD_ID_UNIQUE
+        GC_ASSERT(GC_mark_lock_holder != NUMERIC_THREAD_ID(pthread_self()));
+#     endif
       if (pthread_mutex_lock(&mark_mutex) != 0) {
         ABORT("pthread_mutex_lock failed");
       }