[#47562] [Backport 200 - Backport #8716][Open] segmation fault 正規表現で大量のグループを利用時 — "taka-yoshi (taka-yoshi taka)" <smokeonthewater222@...>

15 messages 2013/08/01

[#47569] [ruby-trunk - Feature #8726][Open] Class#source_location — "takiuchi (Genki Takiuchi)" <genki@...21g.com>

14 messages 2013/08/03

[ruby-dev:47627] [ruby-trunk - Bug #8749] Readline.readline stops STDOUT?

From: "no6v (Nobuhiro IMAI)" <nov@...>
Date: 2013-08-15 03:10:21 UTC
List: ruby-dev #47627
Issue #8749 has been updated by no6v (Nobuhiro IMAI).


> 読み込みでブロックしている時に GVL を解放していなくて他のスレッドが動けないようです。

ありがとうございます。出力じゃなくメインスレッド自体が止まっていたんですね。

> その判断のところが r42402 で変化してしまって、他のスレッドが動けなくなっていた
> のですが、Ruby 1.9 以降では、GVL を外して読み込めばブロック中に
> 他のスレッドは動けるのでそうするのがいいんじゃないでしょうか。
> 
> readline-release-gvl.patch みたいなのはどうですかね。

今回問題にした挙動は r42525 で一旦直って r42527 でまた壊れはしたものの
r42528 でまた直っているようです。これはたまたまでしょうか。

もちろん 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]
 }
 ^

----------------------------------------
Bug #8749: Readline.readline stops STDOUT?
https://bugs.ruby-lang.org/issues/8749#change-41167

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/

In This Thread