[前][次][番号順一覧][スレッド一覧]

ruby-changes:20323

From: kosaki <ko1@a...>
Date: Sun, 3 Jul 2011 06:18:24 +0900 (JST)
Subject: [ruby-changes:20323] kosaki:r32371 (trunk): * thread_pthread.c (get_stack): pthread_attr_getstack() doesn't

kosaki	2011-07-03 06:18:16 +0900 (Sun, 03 Jul 2011)

  New Revision: 32371

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=32371

  Log:
    * thread_pthread.c (get_stack): pthread_attr_getstack() doesn't
      return stack start addres, but stack base address. Thus,
      we need to add stack size for getting stack start address.
      And, we don't have to decrease guard size twice.
    * thread_pthread.c (thread_start_func_1): don't use inaccurate
      stack start guess if native_thread_init_stack() can be used.
      [Bug #1813] [ruby-core:24540]

  Modified files:
    trunk/ChangeLog
    trunk/thread_pthread.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 32370)
+++ ChangeLog	(revision 32371)
@@ -1,3 +1,13 @@
+Sun Jul  3 06:10:26 2011  KOSAKI Motohiro  <kosaki.motohiro@g...>
+
+	* thread_pthread.c (get_stack): pthread_attr_getstack() doesn't
+	  return stack start addres, but stack base address. Thus,
+	  we need to add stack size for getting stack start address.
+	  And, we don't have to decrease guard size twice.
+	* thread_pthread.c (thread_start_func_1): don't use inaccurate
+	  stack start guess if native_thread_init_stack() can be used.
+	  [Bug #1813] [ruby-core:24540]
+
 Sun Jul  3 04:50:08 2011  KOSAKI Motohiro  <kosaki.motohiro@g...>
 
 	* thread_pthread.c (get_stack): add to a care of gurad page on Mac
Index: thread_pthread.c
===================================================================
--- thread_pthread.c	(revision 32370)
+++ thread_pthread.c	(revision 32371)
@@ -463,19 +463,16 @@
     pthread_attr_t attr;
     size_t guard = 0;
 
-# ifdef HAVE_PTHREAD_GETATTR_NP
+# ifdef HAVE_PTHREAD_GETATTR_NP /* Linux */
+    STACK_GROW_DIR_DETECTION;
     CHECK_ERR(pthread_getattr_np(pthread_self(), &attr));
-#   ifdef HAVE_PTHREAD_ATTR_GETSTACK /* Linux */
+#   ifdef HAVE_PTHREAD_ATTR_GETSTACK
     CHECK_ERR(pthread_attr_getstack(&attr, addr, size));
+    STACK_DIR_UPPER((void)0, (void)(*addr = (char *)*addr + *size));
 #   else
     CHECK_ERR(pthread_attr_getstackaddr(&attr, addr));
     CHECK_ERR(pthread_attr_getstacksize(&attr, size));
 #   endif
-    if (pthread_attr_getguardsize(&attr, &guard) == 0) {
-	STACK_GROW_DIR_DETECTION;
-	STACK_DIR_UPPER((void)0, (void)(*addr = (char *)*addr + guard));
-	*size -= guard;
-    }
 # elif defined HAVE_PTHREAD_ATTR_GET_NP /* FreeBSD, DragonFly BSD, NetBSD */
     CHECK_ERR(pthread_attr_init(&attr));
     CHECK_ERR(pthread_attr_get_np(pthread_self(), &attr));
@@ -603,6 +600,10 @@
     return 0;
 }
 
+#ifndef __CYGWIN__
+#define USE_NATIVE_THREAD_INIT 1
+#endif
+
 static void *
 thread_start_func_1(void *th_ptr)
 {
@@ -613,12 +614,16 @@
 	rb_thread_t *th = th_ptr;
 	VALUE stack_start;
 
-#ifndef __CYGWIN__
+#if defined USE_NATIVE_THREAD_INIT
 	native_thread_init_stack(th);
 #endif
 	native_thread_init(th);
 	/* run */
+#if defined USE_NATIVE_THREAD_INIT
+	thread_start_func_2(th, th->machine_stack_start, rb_ia64_bsp());
+#else
 	thread_start_func_2(th, &stack_start, rb_ia64_bsp());
+#endif
     }
 #if USE_THREAD_CACHE
     if (1) {

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]