diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-06-11 08:38:09 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-06-11 08:38:09 +0000 |
commit | dfd8c5d4020131798d3fe52bb6a0c973422aded2 (patch) | |
tree | 71e12951745cde99de92fd7cd79bf3c90052afff /thread_pthread.c | |
parent | e2b10b6d131425c395c5fe286ce6fd55d46f7c51 (diff) | |
download | ruby-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.c | 6 |
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); } |