aboutsummaryrefslogtreecommitdiffstats
path: root/thread_pthread.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-06-11 08:38:09 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-06-11 08:38:09 +0000
commitdfd8c5d4020131798d3fe52bb6a0c973422aded2 (patch)
tree71e12951745cde99de92fd7cd79bf3c90052afff /thread_pthread.c
parente2b10b6d131425c395c5fe286ce6fd55d46f7c51 (diff)
downloadruby-dfd8c5d4020131798d3fe52bb6a0c973422aded2.tar.gz
thread.c: fix for non-scalar pthread_t
* configure.in (rb_cv_scalar_pthread_t): pthread_t is not required to be a scalar type. * thread.c (fill_thread_id_string, thread_id_str): dump pthread_t in hexadecimal form if it is not a scalar type, assume it can be represented in a pointer form otherwise. based on the patch by Rei Odaira at [ruby-core:62867]. [ruby-core:62857] [Bug #9884] * thread_pthread.c (Init_native_thread, thread_start_func_1), (native_thread_create): set thread_id_str if needed. * vm_core.h (rb_thread_t): add thread_id_string if needed. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46406 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'thread_pthread.c')
-rw-r--r--thread_pthread.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/thread_pthread.c b/thread_pthread.c
index 11a1a2bf08..fcb2ec9491 100644
--- a/thread_pthread.c
+++ b/thread_pthread.c
@@ -454,6 +454,7 @@ Init_native_thread(void)
pthread_key_create(&ruby_native_thread_key, NULL);
th->thread_id = pthread_self();
+ fill_thread_id_str(th);
native_thread_init(th);
#ifdef USE_SIGNAL_THREAD_LIST
native_mutex_initialize(&signal_thread_list_lock);
@@ -798,6 +799,7 @@ thread_start_func_1(void *th_ptr)
VALUE stack_start;
#endif
+ fill_thread_id_str(th);
#if defined USE_NATIVE_THREAD_INIT
native_thread_init_stack(th);
#endif
@@ -958,6 +960,8 @@ native_thread_create(rb_thread_t *th)
native_mutex_unlock(&th->interrupt_lock);
#endif
thread_debug("create: %p (%d)\n", (void *)th, err);
+ /* should be done in the created thread */
+ fill_thread_id_str(th);
#ifdef HAVE_PTHREAD_ATTR_INIT
CHECK_ERR(pthread_attr_destroy(&attr));
#endif
@@ -1157,7 +1161,7 @@ remove_signal_thread_list(rb_thread_t *th)
static void
ubf_select_each(rb_thread_t *th)
{
- thread_debug("ubf_select_each (%p)\n", (void *)th->thread_id);
+ thread_debug("ubf_select_each (%"PRI_THREAD_ID")\n", thread_id_str(th));
if (th) {
pthread_kill(th->thread_id, SIGVTALRM);
}