Bug #2460

RubySpecでFiberのSpecがおちる

Added by 三村 益隆 over 4 years ago. Updated about 1 year ago.

[ruby-dev:39855]
Status:Closed
Priority:Normal
Assignee:Koichi Sasada
Category:-
Target version:1.9.3
ruby -v: Backport:

Description

=begin
ruby 1.9.2dev (2009-12-08 trunk 26049)で、FiberのSpecがこけているのですが、
どうやらRubySpec側が、昔ITSに登録されたバグを誤解してSpecが書かれている気がします。
いかがでしょうか?
core/fiber/resume_spec.rb
22 # http://redmine.ruby-lang.org/issues/show/595
23 it "executes the ensure clause" do
24 fib = Fiber.new{
25 begin
26 Fiber.yield :begin
27 ensure
28 :ensure
29 end
30 }
31 fib.resume.should == :ensure
32 end
コメントに書かれている issue の 595 を見ると、Rubyのプロセスが終了するときに
ensureが呼ばれないというものなのですが、これを再現させようとしているのか、
595の内容を間違って記述している気がします。
=end


Related issues

Duplicated by ruby-trunk - Bug #595: Fiber ignores ensure clause Assigned 09/24/2008 10/25/2008

History

#1 Updated by 三村 益隆 over 4 years ago

=begin
このFiberのspecに対し、AsakusaのIRCにて笹田さんよりSpecが間違っているとい返信をいただきました。
Hiro Asariさんが、以下のようなspecに変更していただいてくれました。
core/fiber/resume_spec.rb

22 ruby_bug "redmine #595", "1.9" do
23 it "executes the ensure clause" do
24 fib = Fiber.new{
25 begin
26 exit 0
27 rescue SystemExit
28 ensure
29 :ensure
30 end
31 }
32 fib.resume.should == :ensure
33 end

私の認識だと、issue 595 の内容は、resume 後のFiberのensureがRubyのプロセス終了時に呼ばれないという問題とおもっています。
ですので、このパッチでもissue595の内容をみたせていないと思っているのですが、いかがでしょうか?

=end

#2 Updated by Nobuyoshi Nakada over 4 years ago

=begin
なかだです。

At Sat, 19 Dec 2009 15:30:54 +0900,
三村 益隆 wrote in :

私の認識だと、issue 595 の内容は、resume 後のFiberのensureが
Rubyのプロセス終了時に呼ばれないという問題とおもっています。
ですので、このパッチでもissue595の内容をみたせていないと思って
いるのですが、いかがでしょうか?

ということだと思います。単独のプロセスでテストするのは無理がある
のではないでしょうか。

--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦

=end

#3 Updated by Hiro Asari over 4 years ago

=begin
浅里です。

On Dec 19, 2009, at 2:48 AM, Nobuyoshi Nakada wrote:

なかだです。

At Sat, 19 Dec 2009 15:30:54 +0900,
三村 益隆 wrote in :

私の認識だと、issue 595 の内容は、resume 後のFiberのensureが
Rubyのプロセス終了時に呼ばれないという問題とおもっています。
ですので、このパッチでもissue595の内容をみたせていないと思って
いるのですが、いかがでしょうか?

ということだと思います。単独のプロセスでテストするのは無理がある
のではないでしょうか。

--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦

「単独では無理」というのはFiberに限った事でしょうか。
それともexit周りのspecは難しい、という事でしょうか。
今回の修正では
http://github.com/rubyspec/rubyspec/blob/master/core/kernel/exit_spec.rb
を参考にしたんですが。

=end

#4 Updated by Yui NARUSE over 3 years ago

  • Status changed from Open to Assigned
  • Assignee set to Koichi Sasada

=begin

=end

#5 Updated by Hiroshi Nakamura almost 3 years ago

  • Target version changed from 1.9.2 to 1.9.3

#6 Updated by Yusuke Endoh almost 3 years ago

「単独では無理」というのはFiberに限った事でしょうか。
それともexit周りのspecは難しい、という事でしょうか。

後者だと思います。
Fiber に限らず、Ruby プロセス終了時の挙動は実際に終了させなければテストでき
ないので。

この件に関しては、実行終了というよりは、「Fiber が途中状態のまま GC されたときに
ensure 節が実行される」という仕様を検査したいわけですが、確実に GC させるには
Ruby プロセスを終了させるくらいしか手がないですかね。

Yusuke Endoh mame@tsg.ne.jp

#7 Updated by Motohiro KOSAKI almost 3 years ago

  • Status changed from Assigned to Closed

元々の RubySpecでFiberのSpecがおちる問題はasariさんがspecを書き換えたことで解決しているので、残課題は595で取り扱うべきだと思います。重複クローズします。

#8 Updated by Yui NARUSE about 1 year ago

  • Tracker changed from misc to Bug

Also available in: Atom PDF