RubySpec #2460

RubySpecでFiberのSpecがおちる

Added by 三村 益隆 about 2 years ago. Updated 8 months ago.

[ruby-dev:39855]
Status:Closed Start date:12/08/2009
Priority:Normal Due date:
Assignee:Koichi Sasada % Done:

0%

Category:-
Target version:1.9.3

Description

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の内容を間違って記述している気がします。

Related issues

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

History

Updated by 三村 益隆 about 2 years ago

この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の内容をみたせていないと思っているのですが、いかがでしょうか?

Updated by Nobuyoshi Nakada about 2 years ago

なかだです。

At Sat, 19 Dec 2009 15:30:54 +0900,
三村 益隆 wrote in [ruby-dev:39893]:
> 私の認識だと、issue 595 の内容は、resume 後のFiberのensureが
> Rubyのプロセス終了時に呼ばれないという問題とおもっています。
> ですので、このパッチでもissue595の内容をみたせていないと思って
> いるのですが、いかがでしょうか?

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

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

Updated by Hiro Asari about 2 years ago

浅里です。

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

> なかだです。
> 
> At Sat, 19 Dec 2009 15:30:54 +0900,
> 三村 益隆 wrote in [ruby-dev:39893]:
>> 私の認識だと、issue 595 の内容は、resume 後のFiberのensureが
>> Rubyのプロセス終了時に呼ばれないという問題とおもっています。
>> ですので、このパッチでもissue595の内容をみたせていないと思って
>> いるのですが、いかがでしょうか?
> 
> ということだと思います。単独のプロセスでテストするのは無理がある
> のではないでしょうか。
> 
> -- 
> --- 僕の前にBugはない。
> --- 僕の後ろにBugはできる。
>    中田 伸悦
> 

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

Updated by Yui NARUSE over 1 year ago

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

Updated by Hiroshi Nakamura 8 months ago

  • Target version changed from 1.9.2 to 1.9.3

Updated by Yusuke Endoh 8 months ago

> 「単独では無理」というのはFiberに限った事でしょうか。 > それともexit周りのspecは難しい、という事でしょうか。 後者だと思います。 Fiber に限らず、Ruby プロセス終了時の挙動は実際に終了させなければテストでき ないので。 この件に関しては、実行終了というよりは、「Fiber が途中状態のまま GC されたときに ensure 節が実行される」という仕様を検査したいわけですが、確実に GC させるには Ruby プロセスを終了させるくらいしか手がないですかね。 -- Yusuke Endoh <mame@tsg.ne.jp>

Updated by Motohiro KOSAKI 8 months ago

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

Also available in: Atom PDF