[#24536] 「Rubyの落し方」 v.s. ruby_1_8 — akira yamada / やまだあきら <akira@...>

<URL:http://jp.rubyist.net/magazine/?0002-RubyCore>

40 messages 2004/10/20
[#24541] Re: 「Rubyの落し方」 v.s. ruby_1_8 — Yukihiro Matsumoto <matz@...> 2004/10/20

まつもと ゆきひろです

[#24599] 1.8.2 preview3? — akira yamada / やまだあきら <akira@...> 2004/10/26

2004-10-20 (水) の 21:38 +0900 に Yukihiro Matsumoto さんは書きました:

[#24605] Re: 1.8.2 preview3? — akira yamada / やまだあきら <akira@...> 2004/10/27

2004-10-26 (火) の 16:16 +0900 に akira yamada / やまだあきら さんは書きました:

[#24606] Re: 1.8.2 preview3? — Yukihiro Matsumoto <matz@...> 2004/10/27

まつもと ゆきひろです

[#24608] Re: 1.8.2 preview3? — akira yamada / やまだあきら <akira@...> 2004/10/27

2004-10-27 (水) の 11:48 +0900 に Yukihiro Matsumoto さんは書きました:

[#24620] Re: 1.8.2 preview3? — akira yamada / やまだあきら <akira@...> 2004/10/27

2004-10-27 (水) の 12:42 +0900 に akira yamada / やまだあきら さんは書きました:

[#24629] Re: 1.8.2 preview3? — Tanaka Akira <akr@...17n.org> 2004/10/29

In article <1098888819.9446.14.camel@rice.p.arika.org>,

[ruby-dev:24422] Re: Auto stack growing on Mac OS X

From: Mitsuhiro Kondo <miche@...>
Date: 2004-10-04 03:52:25 UTC
List: ruby-dev #24422
近藤です。

On 2004/10/04, at 8:33, Yukihiro Matsumoto wrote:

> 気になるのは、わざわざsetrlimitを指定している場合にも無効に
> なることをどう考えるか、ですね。まあ、OSXだけの問題ですし、
> 特段の反対が無ければコミットしてもいいかな、と思ってますが。

無効になるのは、rlim_curがrlim_maxになってからのことだと思いますが、
Mac OS X10.3での、rlim_maxは67108864(=65536 * 1024)でして、
ここまで使うことはないだろうということでチェックしませんでした。

スタックサイズのチェックの論理を修正したパッチです。

--- gc.c.orig   Sun Oct  3 01:34:33 2004
+++ gc.c        Mon Oct  4 12:11:50 2004
@@ -492,4 +492,21 @@
      int ret;

+#ifdef __APPLE__
+    SET_STACK_END;
+    if (STACK_LENGTH * 3 / 2 > STACK_LEVEL_MAX + GC_WATER_MARK) {
+        struct rlimit rlim;
+       if (getrlimit(RLIMIT_STACK, &rlim) == 0) {
+           rlim.rlim_cur = (rlim.rlim_cur * 3) / 2;
+           if (rlim.rlim_max < rlim.rlim_cur)
+                rlim.rlim_cur = rlim.rlim_max;
+           if (setrlimit(RLIMIT_STACK, &rlim) == 0) {
+               unsigned int space = rlim.rlim_cur/5;
+
+               if (space > 1024*1024) space = 1024*1024;
+               STACK_LEVEL_MAX = (rlim.rlim_cur - space) / 
sizeof(VALUE);
+           }
+       }
+    }
+#endif
      CHECK_STACK(ret);
      return ret;

---
近藤充弘
miche@mac.com


In This Thread