[#26266] pragma on ripper — nobuyoshi nakada <nobuyoshi.nakada@...>
なかだです。
こんにちは、なかむら(う)です。
なかだです。
[#26284] ext/tk/sample/tkextlib/tile/demo.rb で TypeError — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
[#26298] ext/tk/sample/tkextlib/tile/themes — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
[#26305] ext/tk/sample/tkextlib/ICONS/viewIcons.rb — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
永井@知能.九工大です.
[#26312] rb_gc_mark_threads spin — Tanaka Akira <akr@...17n.org>
最近、とあるプログラム(五月雨)が、無限ループに陥ることが何回かありました。
なかだです。
In article <TYOMLEM04FRaqbC8wSA00000024@tyomlvem02.e2k.ad.ge.com>,
なかだです。
In article <TYOMLEM04FRaqbC8wSA00000025@tyomlvem02.e2k.ad.ge.com>,
なかだです。
In article <TYOMLEM04Rqf69aZbLA0000002d@tyomlvem02.e2k.ad.ge.com>,
なかだです。
In article <200506101543.j5AFhToG009328@sharui.nakada.niregi.kanuma.tochigi.jp>,
In article <8764wlil9l.fsf@m17n.org>,
なかだです。
In article <200506111335.j5BDZkoG019423@sharui.nakada.niregi.kanuma.tochigi.jp>,
まつもと ゆきひろです
In article <1118583170.298416.26464.nullmailer@x31.priv.netlab.jp>,
まつもと ゆきひろです
In article <1118586617.180748.27381.nullmailer@x31.priv.netlab.jp>,
[#26324] XMLRPC charset — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#26358] test failures and errors — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#26387] warningを減らす — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#26405] WEBrick DoS vulnerability — Tanaka Akira <akr@...17n.org>
NetBSD 2.0 で WEBrick を使って HTTP サーバを動かした場合、クライアント
ごとうゆうぞうです。
In article <20050708.175802.957830318.gotoyuzo@sawara.does.notwork.org>,
In message <87fyupzgcq.fsf@m17n.org>,
In article <20050708.211519.179953950.gotoyuzo@sawara.does.notwork.org>,
In message <87d5ptzdpc.fsf@m17n.org>,
前田です。
In article <42CF1AF2.5000407@ruby-lang.org>,
In message <878y0erpv7.fsf@m17n.org>,
[#26410] irbのlexerが数値認識に失敗 — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#26417] test.rb failed 167W: ruby 1.9.0 (2005-06-30) [i686-linux] (boron) — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#26421] Subversion — Shugo Maeda <shugo@...>
前田です。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
山本です。
須藤です.
In article <20050703.152549.41008576.kou@cozmixng.org>,
[ruby-dev:26346] Re: rb_gc_mark_threads spin
In article <1118586617.180748.27381.nullmailer@x31.priv.netlab.jp>,
Yukihiro Matsumoto <matz@ruby-lang.org> writes:
> これは rb_gc_mark_threads でFOREACH_THREAD_FROM(main_thread)
> を使うことで対応した部分ですね。これで[ruby-dev:26312]で報告
> されている無限ループは対処できてると思いますが、どうですか?
はい。
ただ、そういういかにも対処を忘れていそうな状況自体を (簡単に) なくして
しまえるのであれば、そっちのほうがいいだろう、とは思うわけですが。
> 確かに。terminate_process()の中で行っているように
>
> rb_class_new_instance(2, args, rb_eSystemExit)
>
> を使うべきでしょうね。
やはり。
> |また、そもそも signal は main thread に届くという仕様なので、届いた瞬
> |間に偶然動いていたスレッドを遡って終了させてから main thread に伝播す
> |るのではなく、直接 main thread に送るほうが適切だと思います。
>
> おっしゃる通りで、rb_thread_interrupt()はそのつもりで書いて
> ます。今回はrb_exit()という話ですから、どこかで「signalが届
> いた瞬間偶然動いたスレッドを終了させてからmain threadに伝搬
> させる」ようなコードがあるということですね。それは見落としで
> すから、直す必要があります。どこでしたっけ(trap以外で)。
sigexit -> rb_exit -> terminate_process -> rb_exc_raise
という流れで、signal が到着したタイミングで動いていたスレッドで例外がおきます。
たとえば、次のスクリプトで ^C を送るたびに 1 と 2 のどちらかが表示されます。
% ./ruby -e '
trap(:INT, "EXIT")
t1 = Thread.new { loop { begin loop {}; rescue SystemExit; p 1 end } }
t2 = Thread.new { loop { begin loop {}; rescue SystemExit; p 2 end } }
t1.join
t2.join
'
1
1
2
1
2
2
...
> |さらに、trap で EXIT にすると任意のタイミングで終了させられるようなの
> |ですが、これは危険ではないでしょうか。まぁ、これは安全な signal
> |handling とからむので、そう単純な話ではありませんが。
>
> それでもmain_threadでexitするべきでしょうね。ちょっと考えて
> みます。trap_exec()をいつもmain threadで実行するようにすれば
> 良いのかなあ。
えぇと、伝わらなかった気がするんですが、たとえ malloc とかの途中であろ
うが signal が来ると、そこで Ruby レベルの例外が発生して malloc などが
中断することを指摘しています。
なお、上記のスクリプトで、^C を送りつづけると SEGV します。おそらく、
その危険性のひとつの表れなのではないかという気がします。(調べてないん
で違うかもしれませんが)
% ./ruby -e '
trap(:INT, "EXIT")
t1 = Thread.new { loop { begin loop {}; rescue SystemExit; p 1 end } }
t2 = Thread.new { loop { begin loop {}; rescue SystemExit; p 2 end } }
t1.join
t2.join
'
1
1
2
2
1
2
2
2
2
2
1
-e:4: [BUG] Segmentation fault
ruby 1.9.0 (2005-06-11) [i686-linux]
(gdb) bt
#0 0x4009e7c1 in kill () from /lib/libc.so.6
#1 0x4009e545 in raise () from /lib/libc.so.6
#2 0x4009fa88 in abort () from /lib/libc.so.6
#3 0x0810645b in rb_bug (fmt=0x0) at error.c:214
#4 0x080d9412 in sigsegv (sig=11) at signal.c:523
#5 <signal handler called>
#6 rb_svar (cnt=0) at eval.c:904
#7 0x080ae4a2 in rb_lastline_get () at parse.y:8506
#8 0x0806def7 in rb_thread_save_context (th=0x8178ff0) at eval.c:10349
#9 0x08061358 in rb_thread_schedule () at eval.c:10903
#10 0x0806635c in rb_thread_fd_writable (fd=2) at eval.c:10948
#11 0x08084a89 in io_fflush (fptr=0x8167110) at io.c:385
#12 0x08084e18 in io_fwrite (str=1075636136, fptr=0x8167110) at io.c:530
#13 0x080850e2 in io_write (io=1, str=1075636136) at io.c:621
#14 0x080702e2 in call_cfunc (func=0x8085020 <io_write>, recv=1075634136, len=4, argc=135741768, argv=0xbfffd1c8)
at eval.c:5578
#15 0x08069b2a in rb_call0 (klass=1075636676, recv=1075634136, id=7313, oid=95, argc=1, argv=0xbfffd1c8, body=0x401ce424,
nosuper=0) at eval.c:5723
#16 0x0805c759 in rb_call (klass=1075636676, recv=1075634136, mid=1075636676, argc=1, argv=0xbfffd1c8, scope=1)
at eval.c:5945
#17 0x0805c9c4 in rb_funcall (recv=1075634136, mid=95, n=1) at ruby.h:642
#18 0x08088b1a in rb_f_p (argc=1, argv=0xbfffd458) at io.c:631
#19 0x0807030a in call_cfunc (func=0x8088a50 <rb_f_p>, recv=1075673616, len=4, argc=135741768, argv=0xbfffd458)
at eval.c:5581
#20 0x08069b2a in rb_call0 (klass=1075678356, recv=1075673616, id=7417, oid=95, argc=1, argv=0xbfffd458, body=0x401cea3c,
nosuper=0) at eval.c:5723
#21 0x0805c759 in rb_call (klass=1075678356, recv=1075673616, mid=1075678356, argc=1, argv=0xbfffd458, scope=1)
at eval.c:5945
#22 0x08057e8b in rb_eval (self=1075673616, n=0x5f) at ruby.h:642
#23 0x0805745c in rb_eval (self=1075673616, n=0x5f) at eval.c:3190
#24 0x0805aeb8 in rb_yield_0 (val=6, self=1075673616, klass=0, flags=0, avalue=0) at eval.c:4915
#25 0x08068e64 in rb_f_loop () at eval.c:5061
#26 0x08070311 in call_cfunc (func=0x8068e30 <rb_f_loop>, recv=1075673616, len=4, argc=135741768, argv=0x0) at eval.c:5584
#27 0x08069b2a in rb_call0 (klass=1075678356, recv=1075673616, id=3953, oid=95, argc=0, argv=0x0, body=0x401d7100,
nosuper=0) at eval.c:5723
#28 0x0805c759 in rb_call (klass=1075678356, recv=1075673616, mid=1075678356, argc=0, argv=0x0, scope=1) at eval.c:5945
#29 0x08057e8b in rb_eval (self=1075673616, n=0x5f) at ruby.h:642
#30 0x0805a32b in rb_eval (self=1075673616, n=0x5f) at eval.c:3099
#31 0x0805aeb8 in rb_yield_0 (val=1075606396, self=1075673616, klass=0, flags=1, avalue=2) at eval.c:4915
---Type <return> to continue, or q <return> to quit---
#32 0x0806ede9 in rb_thread_yield_0 (arg=95) at eval.c:12114
#33 0x0806ca15 in rb_block_pass (func=0x806ecc0 <rb_thread_yield_0>, arg=1075606396, proc=1075606376) at eval.c:8762
#34 0x08062d21 in rb_thread_start_1 () at eval.c:12068
#35 0x0806804e in ruby_exec_internal () at eval.c:1567
#36 0x08064d1c in ruby_run () at eval.c:1579
#37 0x0805409e in main (argc=95, argv=0x5f, envp=0xbffff904) at main.c:46
(gdb)
--
[田中 哲][たなか あきら][Tanaka Akira]