diff options
author | kanemoto <kanemoto@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-06-29 17:29:27 +0000 |
---|---|---|
committer | kanemoto <kanemoto@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-06-29 17:29:27 +0000 |
commit | 78d48a330d481948f1d899d72ae5b122b7756533 (patch) | |
tree | 86c815c8301a9a8760623aa92fd55484c206c8d8 | |
parent | a9ffa5cecf5e84d78cfc5ecd9b1dcaedb162a1fa (diff) | |
download | ruby-78d48a330d481948f1d899d72ae5b122b7756533.tar.gz |
* thread_pthread.c (get_stack): use pthread_getthrds_np() for AIX.
* configure.in: ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@28485 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | configure.in | 2 | ||||
-rw-r--r-- | thread_pthread.c | 12 |
3 files changed, 19 insertions, 1 deletions
@@ -1,3 +1,9 @@ +Wed Jun 30 02:30:26 2010 Yutaka Kanemoto <kanemoto@ruby-lang.org> + + * thread_pthread.c (get_stack): use pthread_getthrds_np() for AIX. + + * configure.in: ditto. + Tue Jun 29 21:11:15 2010 Masaya Tarui <tarui@ruby-lnag.org> * ext/stringio/stringio.c (strio_write): add RB_GC_GUARD. diff --git a/configure.in b/configure.in index 4098b34c3d..679007dacb 100644 --- a/configure.in +++ b/configure.in @@ -1568,7 +1568,7 @@ if test x"$enable_pthread" = xyes; then AC_CHECK_FUNCS(nanosleep sched_yield pthread_attr_setinheritsched \ pthread_getattr_np pthread_attr_get_np pthread_attr_getstack\ pthread_get_stackaddr_np pthread_get_stacksize_np \ - thr_stksegment pthread_stackseg_np) + thr_stksegment pthread_stackseg_np pthread_getthrds_np) if test x"$ac_cv_func_nanosleep" = xno; then AC_CHECK_LIB(rt, nanosleep) if test x"$ac_cv_lib_rt_nanosleep" = xyes; then diff --git a/thread_pthread.c b/thread_pthread.c index c2a555aa6c..99edbc62e1 100644 --- a/thread_pthread.c +++ b/thread_pthread.c @@ -191,6 +191,8 @@ native_thread_destroy(rb_thread_t *th) #define STACKADDR_AVAILABLE 1 #elif defined HAVE_THR_STKSEGMENT || defined HAVE_PTHREAD_STACKSEG_NP #define STACKADDR_AVAILABLE 1 +#elif defined HAVE_PTHREAD_GETTHRDS_NP +#define STACKADDR_AVAILABLE 1 #endif #ifdef STACKADDR_AVAILABLE @@ -240,6 +242,16 @@ get_stack(void **addr, size_t *size) # endif *addr = stk.ss_sp; *size = stk.ss_size; +#elif defined HAVE_PTHREAD_GETTHRDS_NP + pthread_t th = pthread_self(); + struct __pthrdsinfo thinfo; + char reg[256]; + int regsiz=sizeof(reg); + CHECK_ERR(pthread_getthrds_np(&th, PTHRDSINFO_QUERY_ALL, + &thinfo, sizeof(thinfo), + ®, ®siz)); + *addr = thinfo.__pi_stackaddr; + *size = thinfo.__pi_stacksize; #endif return 0; #undef CHECK_ERR |