summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2014-08-22 14:54:53 +0400
committerIvan Maidanski <ivmai@mail.ru>2014-08-22 15:06:52 +0400
commit8cdc86284ff3a7faf03d68e44707009b870221d8 (patch)
treeccfcd98a9aa0163005d013d0fd63fd6ea47c5a5c
parentb41c6771a3405eb9074651a7638639edbf662245 (diff)
downloadbdwgc-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.c4
-rw-r--r--win32_threads.c5
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");
}