RubySpec #2460
RubySpecでFiberのSpecがおちる
| Status: | Closed | Start date: | 12/08/2009 | |
|---|---|---|---|---|
| Priority: | Normal | Due date: | ||
| Assignee: | % 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で取り扱うべきだと思います。重複クローズします。