Bug #7878
closedE::Lazy#grep ignores ^C
Description
このタイミングでバグかよとお思いでしょうが見つけちまったもんはしょうがない、
[0].lazy.cycle.grep(1).first
が^Cに反応しません。どこかでRUBY_VM_CHECK_INTSしてください。
Updated by mame (Yusuke Endoh) over 11 years ago
- Status changed from Open to Assigned
- Assignee set to ko1 (Koichi Sasada)
Updated by ko1 (Koichi Sasada) over 11 years ago
なぜ私が、と思ったんですが、遠藤さんいい読みですね。
これは、
c_method_foo(){
while(1){ rb_funcall(c_method_bar); }
}
のように、foo, bar が両方とも C メソッドで、foo が bar を無限に呼ぶ、という段階で CHECK_INTS が入る余地がありませんでした。これは、ちょっと不味いバグなので直します。ううん、このタイミングでこれか。
Updated by ko1 (Koichi Sasada) over 11 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
This issue was solved with changeset r39308.
Shyouhei, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
- vm_eval.c (vm_call0_body): check interrupts after method dispatch
from C methods. [Bug #7878]
Updated by ko1 (Koichi Sasada) over 11 years ago
- Status changed from Closed to Assigned
- Assignee changed from ko1 (Koichi Sasada) to mame (Yusuke Endoh)
r39308 で取り急ぎ対応しました。
mameさん
backport してもいいでしょうか。
Updated by mame (Yusuke Endoh) over 11 years ago
- Assignee changed from mame (Yusuke Endoh) to ko1 (Koichi Sasada)
ko1 (Koichi Sasada) wrote:
なぜ私が、と思ったんですが、遠藤さんいい読みですね。
RUBY_VM_CHECK_INTS なんだから笹田さんでしょう。
ko1 (Koichi Sasada) wrote:
r39308 で取り急ぎ対応しました。
mameさん
backport してもいいでしょうか。
RUBY_VM_CHECK_INTS したらまずいところで RUBY_VM_CHECK_INTS してしまう副作用がないかが大変気になる(具体的に心当たりがあるわけではない)のですが、大丈夫ですかね? 自信があるなら OK です。
--
Yusuke Endoh mame@tsg.ne.jp
Updated by ko1 (Koichi Sasada) over 11 years ago
(2013/02/19 21:20), mame (Yusuke Endoh) wrote:
なぜ私が、と思ったんですが、遠藤さんいい読みですね。
RUBY_VM_CHECK_INTS なんだから笹田さんでしょう。
てっきり、Lazy cycle 内でなんか凄いことをやっているのかと思っておりま
した。enum.c のほうに変更入れるなら私じゃないだろう、と。
ko1 (Koichi Sasada) wrote:
r39308 で取り急ぎ対応しました。
mameさん
backport してもいいでしょうか。RUBY_VM_CHECK_INTS したらまずいところで RUBY_VM_CHECK_INTS してしまう副作用がないかが大変気になる(具体的に心当たりがあるわけではない)のですが、大丈夫ですかね? 自信があるなら OK です。
これに関して、実は 1.9.3 に戻したというのが実情です RUBY_VM_CHECK_INTS
を外して綺麗になって速くなるかな、と思ったんですが、ちょっとこの挙動(C
method の繰り返しの中で rb_funcall している)を思いつかなかったので、デ
グレ対応と言えるかと思います。というわけで、自信があります。
本当は、もうちょっと綺麗になりそうだな、という手段を思いついたのです
が、怖いので 1.9.3 相当に戻す、という対応になっております。具体的には、
vm_call0_body() の冒頭、 th->passed_block をクリアした後に CHECK_INTS す
ればよい、はず。ただし、影響が読めないので、2.1 送り。
よろしくお願いします。
--
// SASADA Koichi at atdot dot net
Updated by mame (Yusuke Endoh) over 11 years ago
ko1 (Koichi Sasada) wrote:
これに関して、実は 1.9.3 に戻したというのが実情です RUBY_VM_CHECK_INTS
を外して綺麗になって速くなるかな、と思ったんですが、ちょっとこの挙動(C
method の繰り返しの中で rb_funcall している)を思いつかなかったので、デ
グレ対応と言えるかと思います。というわけで、自信があります。
なるほど、とても安心できる説明ありがとうございます。
バックポートお願いします。
--
Yusuke Endoh mame@tsg.ne.jp
Updated by ko1 (Koichi Sasada) over 11 years ago
- Status changed from Assigned to Closed
merged at r39332.