From dfd8c5d4020131798d3fe52bb6a0c973422aded2 Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 11 Jun 2014 08:38:09 +0000 Subject: 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 --- thread_pthread.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'thread_pthread.c') 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); } -- cgit v1.2.3