From 8cdc86284ff3a7faf03d68e44707009b870221d8 Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Fri, 22 Aug 2014 14:54:53 +0400 Subject: [PATCH] Fix assertion on mark_lock_holder for non-unique NUMERIC_THREAD_ID * 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 | 4 +++- win32_threads.c | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/pthread_support.c b/pthread_support.c index dbdf50b..0689be4 100644 --- a/pthread_support.c +++ b/pthread_support.c @@ -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; } diff --git a/win32_threads.c b/win32_threads.c index 73ba0ff..2b783f4 100644 --- a/win32_threads.c +++ b/win32_threads.c @@ -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"); } -- 2.7.4