[#7300] resolver を呼ばない UDPsocket#recvfrom — Toshihiko SHIMOKAWA / 下川俊彦 <toshi@...>

あんまり ruby-dev な話でも無いのですが、ちょっとした機能拡張の提案なので、

12 messages 1999/07/12
[#7321] Re: resolver を呼ばない UDPsocket#recvfrom — Toshihiko SHIMOKAWA / 下川俊彦 <toshi@...> 1999/07/15

From: Toshihiko SHIMOKAWA / 下川俊彦 <toshi@csce.kyushu-u.ac.jp>

[#7313] Ruby 1.3.5 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.5 is out, check out:

59 messages 1999/07/15
[#7318] Re: Ruby 1.3.5 — WATANABE Hirofumi <watanabe@...> 1999/07/15

わたなべです.

[#7326] Re: Ruby 1.3.5 — Wakou Aoyama <wakou@...> 1999/07/15

青山です。

[#7331] Re: Ruby 1.3.5 — matz@... (Yukihiro Matsumoto) 1999/07/16

まつもと ゆきひろです

[#7340] Re: Ruby 1.3.5 — Wakou Aoyama <wakou@...> 1999/07/16

青山です。

[#7368] Re: Ruby 1.3.5 — matz@... (Yukihiro Matsumoto) 1999/07/19

まつもと ゆきひろです

[#7373] Re: Ruby 1.3.5 — Shin-ichiro Hara <sinara@...> 1999/07/19

原です。

[#7374] Re: Ruby 1.3.5 — matz@... (Yukihiro Matsumoto) 1999/07/19

まつもと ゆきひろです

[#7382] Re: Ruby 1.3.5 — Wakou Aoyama <wakou@...> 1999/07/19

青山です。

[#7386] Re: Ruby 1.3.5 — matz@... (Yukihiro Matsumoto) 1999/07/21

まつもと ゆきひろです

[#7388] Re: Ruby 1.3.5 — Wakou Aoyama <wakou@...> 1999/07/21

青山です。

[#7387] [PATCH]extconf.rb, tcltklib.c, and rubytest.rb for NetBSD — Ryo HAYASAKA <hayasaka@...21.u-aizu.ac.jp>

早坂@会津大学です。

10 messages 1999/07/21

[#7466] [PATCH] for djgpp — WATANABE Hirofumi <watanabe@...>

わたなべです.

21 messages 1999/07/29
[#7467] Re: [PATCH] for djgpp — Katsuyuki Komatsu <komatsu@...> 1999/07/29

小松です。

[ruby-dev:7309] Re: mod_ruby/0.1.2 with Apache/1.3.6 on Solaris/2.5.1

From: Katsuyuki Komatsu <komatsu@...>
Date: 1999-07-15 03:12:12 UTC
List: ruby-dev #7309
小松です。

In [ruby-dev:7305] Re: mod_ruby/0.1.2 with Apache/1.3.6 on Solaris/2.5.1
    on 1999/7/13 11:16:50 matz@netlab.co.jp (Yukihiro Matsumoto) wrote:
||なんだか1回しか通ってないみたいですが。
|
|それが根本的な原因です。つまり、2回通るはずの1回目がなぜだか
|バイパスされちゃってるんですね。それでなされるべき初期化が行
|われずに落ちると。しかし、なんでHP-UXに限って1回目が呼ばれな
|いのか全然分かりません。

どうやらruby_init()が2回呼ばれた形になっているためのようです。

    (1) ruby_startup() → ruby_init()
    (2) httpdのfork()
    (3) ruby_startup() → ruby_init()

この(3)でlibruby.slは(1)の状態を引き継いでいて、
    curr_thread != 0
になっていました。

初期化し過ぎか、2回目のruby_init()の初期化不足のようですね。

ということで、

    (a) 2回目の初期化をバイパスする。
    (b) 2回目のruby_init()の初期化不足を補う。

という案が考えられると思います。

別な案としてmod_ruby.soでstaticな変数を用意して初期化を
バイパスする (ruby_init()を呼ばない) ようにしようとして
みましたが、動きませんでした。

# このへんのapacheの仕組みはよく分からない。
# mod_ruby.soはloadし直されているということ?

HP-UX 10.20で、
    apache_1.3.6
    mod_ruby-0.1.3
    ruby-1.3.4-990625
で動作確認しましたが、他のプラットフォームは試してません。

	/	/	/

(a) 2回目の初期化をバイパスする。

--- eval.c.dist	Fri Jun 25 18:02:34 1999
+++ eval.c	Wed Jul 14 23:45:33 1999
@@ -886,10 +886,15 @@ void Init_ext _((void));
 void
 ruby_init()
 {
+    static int initialized = 0;
     static struct FRAME frame;
     static struct iter iter;
     int state;
 
+    if (initialized)
+	return;
+    initialized = 1;
+
     ruby_frame = top_frame = &frame;
     ruby_iter = &iter;
 
 
	/	/	/

(b) 2回目のruby_init()の初期化不足を補う。

--- eval.c.dist	Fri Jun 25 18:02:34 1999
+++ eval.c	Wed Jul 14 23:46:31 1999
@@ -7276,6 +7276,7 @@ Init_Thread()
     rb_define_method(rb_cThread, "key?", rb_thread_key_p, 1);
 
     /* allocate main thread */
+    curr_thread = 0;
     main_thread = rb_thread_alloc(rb_cThread);
 
     rb_cContinuation = rb_define_class("Continuation", rb_cObject);
--- gc.c.dist	Fri Jun 25 18:02:41 1999
+++ gc.c	Wed Jul 14 23:46:20 1999
@@ -962,6 +962,10 @@ Init_stack(addr)
     if (!addr) addr = &start;
     rb_gc_stack_start = addr;
 #endif
+    Global_List = 0;
+    freelist = 0;
+    heaps_length = 0;
+    heaps_used = 0;
 }
 
 void

--
小松克行 / Katsuyuki Komatsu <komatsu@sarion.co.jp>

In This Thread