diff options
author | Ivan Maidanski <ivmai@mail.ru> | 2014-08-22 14:54:53 +0400 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2014-08-22 15:06:52 +0400 |
commit | 8cdc86284ff3a7faf03d68e44707009b870221d8 (patch) | |
tree | ccfcd98a9aa0163005d013d0fd63fd6ea47c5a5c | |
parent | b41c6771a3405eb9074651a7638639edbf662245 (diff) | |
download | bdwgc-8cdc86284ff3a7faf03d68e44707009b870221d8.tar.gz |
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.
-rw-r--r-- | pthread_support.c | 4 | ||||
-rw-r--r-- | win32_threads.c | 5 |
2 files changed, 7 insertions, 2 deletions
diff --git a/pthread_support.c b/pthread_support.c index dbdf50b7..0689be45 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 73ba0ff2..2b783f4a 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"); } |