ruby-changes:25028
From: nobu <ko1@a...>
Date: Thu, 4 Oct 2012 11:43:42 +0900 (JST)
Subject: [ruby-changes:25028] nobu:r37080 (trunk): thread_pthread.c: precise stack size
nobu 2012-10-04 11:43:30 +0900 (Thu, 04 Oct 2012) New Revision: 37080 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=37080 Log: thread_pthread.c: precise stack size * thread_pthread.c (ruby_init_stack): round stack limit to page size boundary to calculate stack size more precisely. [ruby-dev:46174] [Bug #7084] Modified files: trunk/ChangeLog trunk/thread_pthread.c Index: ChangeLog =================================================================== --- ChangeLog (revision 37079) +++ ChangeLog (revision 37080) @@ -1,3 +1,9 @@ +Thu Oct 4 11:43:28 2012 Nobuyoshi Nakada <nobu@r...> + + * thread_pthread.c (ruby_init_stack): round stack limit to page size + boundary to calculate stack size more precisely. [ruby-dev:46174] + [Bug #7084] + Wed Oct 3 19:51:57 2012 Narihiro Nakamura <authornari@g...> * gc.c: Use the non-recursive marking instead of recursion. The Index: thread_pthread.c =================================================================== --- thread_pthread.c (revision 37079) +++ thread_pthread.c (revision 37080) @@ -649,14 +649,22 @@ STACK_GROW_DIR_DETECTION; get_stack(&stackaddr, &size); space = STACK_DIR_UPPER((char *)addr - (char *)stackaddr, (char *)stackaddr - (char *)addr); + native_main_thread.stack_maxsize = size - space; #elif defined(HAVE_GETRLIMIT) + int pagesize = getpagesize(); struct rlimit rlim; if (getrlimit(RLIMIT_STACK, &rlim) == 0) { size = (size_t)rlim.rlim_cur; } - space = size > 5 * 1024 * 1024 ? 1024 * 1024 : size / 5; + addr = native_main_thread.stack_start; + if (IS_STACK_DIR_UPPER()) { + space = ((size_t)((char *)addr + size) / pagesize) * pagesize - (size_t)addr; + } + else { + space = (size_t)addr - ((size_t)((char *)addr - size) / pagesize + 1) * pagesize; + } + native_main_thread.stack_maxsize = space; #endif - native_main_thread.stack_maxsize = size - space; } } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/