[#47033] [ruby-trunk - Bug #8749][Open] Readline.readline stops STDOUT? — "no6v (Nobuhiro IMAI)" <nov@...>
9 messages
2013/08/07
[#47036] Re: [ruby-trunk - Bug #8749][Open] Readline.readline stops STDOUT?
— Tanaka Akira <akr@...>
2013/08/07
2013/8/7 no6v (Nobuhiro IMAI) <nov@yo.rim.or.jp>:
[#47564] [ruby-trunk - Bug #8719][Open] r42096 make bm_app_factorial.rb slow — "authorNari (Narihiro Nakamura)" <authorNari@...>
4 messages
2013/08/02
[#47565] [ruby-trunk - Bug #8719] r42096 make bm_app_factorial.rb slow
— "authorNari (Narihiro Nakamura)" <authorNari@...>
2013/08/02
[#47569] [ruby-trunk - Feature #8726][Open] Class#source_location — "takiuchi (Genki Takiuchi)" <genki@...21g.com>
14 messages
2013/08/03
[#47574] Re: [ruby-trunk - Feature #8726][Open] Class#source_location
— KOSAKI Motohiro <kosaki.motohiro@...>
2013/08/03
> Classオブジェクトが生成された場所を返す Class#source_location メソッドの実装を希望いたします。
[#47575] Re: [ruby-trunk - Feature #8726][Open] Class#source_location
— KOSAKI Motohiro <kosaki.motohiro@...>
2013/08/03
> なるせさん、わたし、あのバックトレースの整形処理がイマイチ理解できんのだが、
[#47609] Re: [ruby-cvs:49669] naruse:r42527 (trunk): refix r42525 set stdio_file only if stdio — Tanaka Akira <akr@...>
2013/8/12 <naruse@ruby-lang.org>:
7 messages
2013/08/12
[#47610] Re: [ruby-cvs:49669] naruse:r42527 (trunk): refix r42525 set stdio_file only if stdio
— "NARUSE, Yui" <naruse@...>
2013/08/12
あぁ、[ruby-dev:47608]見てませんでした。
[#47611] Re: [ruby-cvs:49669] naruse:r42527 (trunk): refix r42525 set stdio_file only if stdio
— Tanaka Akira <akr@...>
2013/08/12
2013年8月12日 11:38 NARUSE, Yui <naruse@airemix.jp>:
[#47614] Re: [ruby-cvs:49669] naruse:r42527 (trunk): refix r42525 set stdio_file only if stdio
— "NARUSE, Yui" <naruse@...>
2013/08/12
editline の問題は、editlineにはrl_getcがなく、かつreadline.cで、
[#47620] Ruby 2.1 開発者会議 2013-08-31 のお知らせ — "NARUSE, Yui" <naruse@...>
かなり暑いですが、こんにちは。
5 messages
2013/08/14
[#47649] Re: [ruby-changes:30564] akr:r42643 (trunk): * process.c (rb_proc_times): Use RB_GC_GUARD to guard objects from GC. — SASADA Koichi <ko1@...>
akr さん
4 messages
2013/08/21
[#47650] Re: [ruby-changes:30564] akr:r42643 (trunk): * process.c (rb_proc_times): Use RB_GC_GUARD to guard objects from GC.
— Tanaka Akira <akr@...>
2013/08/21
2013/8/21 SASADA Koichi <ko1@atdot.net>:
[#47663] Re: [ruby-core:56878] [ruby-trunk - misc #8835][Open] Introducing a semantic versioning scheme and branching policy — "Akinori MUSHA" <knu@...>
At Fri, 30 Aug 2013 21:49:34 +0900,
6 messages
2013/08/30
[#47664] Re: [ruby-core:56878] [ruby-trunk - misc #8835][Open] Introducing a semantic versioning scheme and branching policy
— KOSAKI Motohiro <kosaki.motohiro@...>
2013/08/30
MjAxMy84LzMwIEFraW5vcmkgTVVTSEEgPGtudUBpZGFlbW9ucy5vcmc+Og0KPiBBdCBGcmksIDMw
[ruby-dev:47628] [ruby-trunk - Bug #8749] Readline.readline stops STDOUT?
From:
"akr (Akira Tanaka)" <akr@...>
Date:
2013-08-15 04:42:06 UTC
List:
ruby-dev #47628
Issue #8749 has been updated by akr (Akira Tanaka).
File readline-release-gvl-2.patch added
no6v (Nobuhiro IMAI) wrote:
>
> 今回問題にした挙動は r42525 で一旦直って r42527 でまた壊れはしたものの
> r42528 でまた直っているようです。これはたまたまでしょうか。
readline_getc で、rl_getc を呼び出すか、rb_io_getbyte を呼び出すかという条件判断が問題で、
前者なら GVL を離さないので他のスレッドは動けず、後者なら動けます。
r42525 で直ったのは、ifp->stdio_file に代入したので、readline_getc 内の
if (rl_instream != ifp->stdio_file) return rl_getc(input);
という条件が成立しなくなったためでしょう。
しかし、[ruby-dev:47608] で述べたように、ifp->stdio_file に readline 側で
作った FILE 構造体を代入すると、IO#close で解放されてしまって、ひいては SEGV になる可能性が出てきます。
r42527 は if 文で上記の ifp->stdio_file への代入をガードしていますが、
[ruby-dev:47609] で述べたように、その条件は決して成り立たないので、実質、
r42525 の revert のようなものです。
r42528 は
if (rl_instream != ifp->stdio_file) return rl_getc(input);
という文を削除していて、そのため、rl_getc じゃなくて下のほうに制御が行って、
rb_io_getbyte を呼び出すようになったのでしょう。
ここで rb_io_getbyte は readline_instream という IO オブジェクトから読むので、
それが input という FILE 構造体と対応しているのかという疑問があるわけで、
だからこそ対応していなかったら input から読むという処理が入っているのだと思いますが、
どういう理由かは知りませんが、消してしまっているようです。
> もちろん attachment:readline-release-gvl.patch を当てても動きます。
> (コンパイル時に以下の警告が出ました)
>
> compiling ../../../../git/ruby/ext/readline/readline.c
> ../../../../git/ruby/ext/readline/readline.c: In function ‘check_ints’:
> ../../../../git/ruby/ext/readline/readline.c:148:1: warning: no return statement in function returning non-void [-Wreturn-type]
> }
> ^
おっと、return NULL; を忘れていました。
つけたのを readline-release-gvl-2.patch として添付します。
----------------------------------------
Bug #8749: Readline.readline stops STDOUT?
https://bugs.ruby-lang.org/issues/8749#change-41168
Author: no6v (Nobuhiro IMAI)
Status: Open
Priority: Normal
Assignee: kouji (Kouji Takao)
Category: ext
Target version:
ruby -v: ruby 2.1.0dev (2013-08-06 trunk 42402) [x86_64-linux]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN
=begin
r42402 で、以下のようなスクリプトの挙動が変わっています。
(Enter を押すかどうかは関係なくて、)Readline.readline を実行中に標準出力への出力が出来なくなっているように見えます。
$ cat rl.rb
require "readline"
th = Thread.new do
p Readline.readline("> ")
end
loop do
p :hi
sleep 2
break unless th.alive?
end
$ ruby -v rl.rb
ruby 2.1.0dev (2013-08-06 trunk 42401) [x86_64-linux]
:hi
> :hi
:hi
:hi
:hi
# しばらく放置してここで Enter
""
$ ruby -v rl.rb
$ /tmp/ruby/bin/ruby -v /tmp/r.rb
ruby 2.1.0dev (2013-08-06 trunk 42402) [x86_64-linux]
:hi
> # しばらく放置してここで Enter
""
$
=end
--
http://bugs.ruby-lang.org/