Project

General

Profile

Actions

Bug #7878

closed

E::Lazy#grep ignores ^C

Added by shyouhei (Shyouhei Urabe) about 11 years ago. Updated about 11 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 2.0.0dev (2013-02-08 trunk 39161) [x86_64-linux]
Backport:
[ruby-dev:47032]

Description

このタイミングでバグかよとお思いでしょうが見つけちまったもんはしょうがない、

[0].lazy.cycle.grep(1).first

が^Cに反応しません。どこかでRUBY_VM_CHECK_INTSしてください。

Updated by mame (Yusuke Endoh) about 11 years ago

  • Status changed from Open to Assigned
  • Assignee set to ko1 (Koichi Sasada)

Updated by ko1 (Koichi Sasada) about 11 years ago

なぜ私が、と思ったんですが、遠藤さんいい読みですね。
これは、

c_method_foo(){
while(1){ rb_funcall(c_method_bar); }
}

のように、foo, bar が両方とも C メソッドで、foo が bar を無限に呼ぶ、という段階で CHECK_INTS が入る余地がありませんでした。これは、ちょっと不味いバグなので直します。ううん、このタイミングでこれか。

Actions #3

Updated by ko1 (Koichi Sasada) about 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) about 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) about 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

Updated by ko1 (Koichi Sasada) about 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) about 11 years ago

ko1 (Koichi Sasada) wrote:

 これに関して、実は 1.9.3 に戻したというのが実情です RUBY_VM_CHECK_INTS
を外して綺麗になって速くなるかな、と思ったんですが、ちょっとこの挙動(C
method の繰り返しの中で rb_funcall している)を思いつかなかったので、デ
グレ対応と言えるかと思います。というわけで、自信があります。

なるほど、とても安心できる説明ありがとうございます。
バックポートお願いします。

--
Yusuke Endoh

Updated by ko1 (Koichi Sasada) about 11 years ago

  • Status changed from Assigned to Closed

merged at r39332.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0