[#25035] 拡張ライブラリへの共有ライブラリのPATHの埋め込み — Takahiro Kambe <taca@...>

こんにちは。

16 messages 2004/12/03
[#25070] Re: 拡張ライブラリへの共有ライブラリのPATHの埋め込み — nobu@... 2004/12/06

なかだです。

[#25071] Re: 拡張ライブラリへの共有ライブラリのPATHの埋め込み — Takahiro Kambe <taca@...> 2004/12/06

In message <200412060607.iB667giF007533@sharui.nakada.niregi.kanuma.tochigi.jp>

[#25089] Re: 拡張ライブラリへの共有ライブラリのPATHの埋め込み — nobu@... 2004/12/07

なかだです。

[#25090] Re: 拡張ライブラリへの共有ライブラリのPATHの埋め込み — Takahiro Kambe <taca@...> 2004/12/07

In message <200412070015.iB70FAiF012770@sharui.nakada.niregi.kanuma.tochigi.jp>

[#25093] Re: 拡張ライブラリへの共有ライブラリのPATHの埋め込み — akira yamada / やまだあきら <akira@...> 2004/12/07

2004-12-07 (火) の 12:27 +0900 に Takahiro Kambe さんは書きました:

[#25041] temporal locking already locked string on simultaneous write — Tanaka Akira <akr@...17n.org>

同じ文字列をほぼ同時に IO に書き込むと、temporal locking already

13 messages 2004/12/04
[#25042] Re: temporal locking already locked string on simultaneous write — Yukihiro Matsumoto <matz@...> 2004/12/04

まつもと ゆきひろです

[#25043] Re: temporal locking already locked string on simultaneous write — Tanaka Akira <akr@...17n.org> 2004/12/04

In article <1102133507.339625.10453.nullmailer@x31.priv.netlab.jp>,

[#25096] double free problem — "Akinori MUSHA" <knu@...>

 ご無沙汰しております。

15 messages 2004/12/07
[#25099] Re: double free problem — Yukihiro Matsumoto <matz@...> 2004/12/07

Hi,

[#25101] non-stdio buffering — Tanaka Akira <akr@...17n.org>

えぇと、今回 1.9 でなにが起きたのかを私が把握している範囲でまとめてお

18 messages 2004/12/07

[#25152] 1.8 reopen problem with duplex popen — Tanaka Akira <akr@...17n.org>

次のように、1.8 で双方向 popen な IO を reopen するとエラーになること

11 messages 2004/12/10

[#25158] core dump on NetBSD 2.0 — Tanaka Akira <akr@...17n.org>

NetBSD 2.0 で次のようにすると core を吐きます。

18 messages 2004/12/11
[#25159] Re: core dump on NetBSD 2.0 — Tanaka Akira <akr@...17n.org> 2004/12/11

In article <87hdmsivva.fsf@serein.a02.aist.go.jp>,

[#25163] Re: core dump on NetBSD 2.0 — Tanaka Akira <akr@...17n.org> 2004/12/12

In article <87ekhwiv7g.fsf@serein.a02.aist.go.jp>,

[#25165] Re: core dump on NetBSD 2.0 — nobu@... 2004/12/13

なかだです。

[#25167] Re: core dump on NetBSD 2.0 — Tanaka Akira <akr@...17n.org> 2004/12/13

In article <200412130040.iBD0e8Qh003275@sharui.nakada.niregi.kanuma.tochigi.jp>,

[#25193] 1.8.2 release schedule — Yukihiro Matsumoto <matz@...>

まつもと ゆきひろです

15 messages 2004/12/14

[#25299] Re: リリース準備 — Yukihiro Matsumoto <matz@...>

まつもと ゆきひろです

20 messages 2004/12/24
[#25301] Re: リリース準備 — TAKAHASHI Masayoshi <maki@...> 2004/12/24

高橋征義です。

[#25302] test_readline.rb blocks on BSD again — GOTOU Yuuzou <gotoyuzo@...>

In message <20041223175402.3116FC6718@lithium.ruby-lang.org>,

15 messages 2004/12/24
[#25314] Re: test_readline.rb blocks on BSD again — GOTOU Yuuzou <gotoyuzo@...> 2004/12/24

In message <20041224.131211.846943951.gotoyuzo@sawara.does.notwork.org>,

[#25315] Re: test_readline.rb blocks on BSD again — Yukihiro Matsumoto <matz@...> 2004/12/24

まつもと ゆきひろです

[#25317] Re: test_readline.rb blocks on BSD again — WATANABE Hirofumi <eban@...> 2004/12/25

わたなべです。

[ruby-dev:25027] Re: IO#flush dumps core again

From: nobu@...
Date: 2004-12-02 04:04:46 UTC
List: ruby-dev #25027
なかだです。

At Wed, 1 Dec 2004 17:02:39 +0900,
Yukihiro Matsumoto wrote in [ruby-dev:25015]:
> |まぁ、それはそれとして上記の微妙な問題とは別ではありますが、なかださん
> |の継続を制限するパッチは適切な方向性を示していると思います。以前ちょっ
> |と可能性に触れた (でもいまだに実験はしていない) GUI の callback で
> |callcc というのもどうにかできる気がしますし。
> 
> GUIのコールバックの件はよく理解できてないのですが、じゃあ、
> 中田さんの変更を取り込みましょうか。[ruby-dev:25004]をコミッ
> トしていただけませんか > なかださん。

[ruby-dev:25004]ではprot_tagを使ってsignal handlerを判断してい
ますが、struct tagはスタック上に取られる(環境がほとんど)なので、
ループ内で割込みを受けた場合などは同じアドレスになってしまって
区別できなくなる可能性があります。

frame_uniqueのような序数を使う方法も考えられますが、ダミーのオ
ブジェクトを使う方法を試してみました。

また、[ruby-dev:25022]のような例を見ると、callback呼び出し用の
関数を用意したほうがいいかもという気がします。


Index: eval.c
===================================================================
RCS file: /cvs/ruby/src/ruby/eval.c,v
retrieving revision 1.739
diff -U2 -p -d -r1.739 eval.c
--- eval.c	2 Dec 2004 00:31:17 -0000	1.739
+++ eval.c	2 Dec 2004 04:02:45 -0000
@@ -9670,4 +9670,34 @@ thread_reset_raised()
 static void rb_thread_ready _((rb_thread_t));
 
+static VALUE trapping_top;
+
+VALUE
+rb_run_callback(func, arg, status)
+    VALUE (*func)_((VALUE));
+    VALUE arg;
+    int *status;
+{
+    VALUE val = Qnil;		/* OK */
+
+    PUSH_TAG(PROT_NONE);
+    PUSH_ITER(ITER_NOT);
+    trapping_top = (VALUE)rb_node_newnode(NODE_MEMO, trapping_top, 0, 0);
+    if ((*status = EXEC_TAG()) == 0) {
+	val = (*func)(arg);
+    }
+    trapping_top = ((NODE *)trapping_top)->u1.value;
+    POP_ITER();
+    POP_TAG();
+    return val;
+}
+
+static VALUE
+run_trap_eval(arg)
+    VALUE arg;
+{
+    VALUE *p = (VALUE *)arg;
+    return rb_eval_cmd(p[0], p[1], (int)p[2]);
+}
+
 static VALUE
 rb_trap_eval(cmd, sig, safe)
@@ -9678,14 +9708,12 @@ rb_trap_eval(cmd, sig, safe)
     VALUE val = Qnil;		/* OK */
     volatile struct thread_status_t save;
+    VALUE arg[3];
 
+    arg[0] = cmd;
+    arg[1] = rb_ary_new3(1, INT2FIX(sig));
+    arg[2] = (VALUE)safe;
     THREAD_COPY_STATUS(curr_thread, &save);
     rb_thread_ready(curr_thread);
-    PUSH_TAG(PROT_NONE);
-    PUSH_ITER(ITER_NOT);
-    if ((state = EXEC_TAG()) == 0) {
-	val = rb_eval_cmd(cmd, rb_ary_new3(1, INT2FIX(sig)), safe);
-    }
-    POP_ITER();
-    POP_TAG();
+    val = rb_run_callback(run_trap_eval, (VALUE)&arg, &state);
     THREAD_COPY_STATUS(&save, curr_thread);
 
@@ -11918,4 +11946,8 @@ rb_thread_trap_eval(cmd, sig, safe)
 {
     rb_thread_critical = 0;
+    if (curr_thread == main_thread) {
+	rb_trap_eval(cmd, sig, safe);
+	return;
+    }
     if (!rb_thread_dead(curr_thread)) {
 	if (THREAD_SAVE_CONTEXT(curr_thread)) {
@@ -12273,4 +12305,5 @@ rb_callcc(self)
     }
     th->thread = curr_thread->thread;
+    th->thgroup = trapping_top;
 
     for (vars = ruby_dyna_vars; vars; vars = vars->next) {
@@ -12314,4 +12347,7 @@ rb_cont_call(argc, argv, cont)
 	rb_raise(rb_eRuntimeError, "continuation called across threads");
     }
+    if (th->thgroup != trapping_top) {
+	rb_raise(rb_eRuntimeError, "continuation called across trap");
+    }
     switch (argc) {
       case 0:
@@ -12581,4 +12617,5 @@ Init_Thread()
     rb_define_method(rb_cCont, "[]", rb_cont_call, -1);
     rb_define_global_function("callcc", rb_callcc, 0);
+    rb_global_variable(&trapping_top);
 
     cThGroup = rb_define_class("ThreadGroup", rb_cObject);


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread