Bug #2460
closed
Added by takkanm (三村 益隆) almost 15 years ago.
Updated over 11 years ago.
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
=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
=begin
なかだです。
At Sat, 19 Dec 2009 15:30:54 +0900,
三村 益隆 wrote in [ruby-dev:39893]:
私の認識だと、issue 595 の内容は、resume 後のFiberのensureが
Rubyのプロセス終了時に呼ばれないという問題とおもっています。
ですので、このパッチでもissue595の内容をみたせていないと思って
いるのですが、いかがでしょうか?
ということだと思います。単独のプロセスでテストするのは無理がある
のではないでしょうか。
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦
=end
=begin
浅里です。
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
を参考にしたんですが。
=end
- Status changed from Open to Assigned
- Assignee set to ko1 (Koichi Sasada)
- Target version changed from 1.9.2 to 1.9.3
「単独では無理」というのはFiberに限った事でしょうか。
それともexit周りのspecは難しい、という事でしょうか。
後者だと思います。
Fiber に限らず、Ruby プロセス終了時の挙動は実際に終了させなければテストでき
ないので。
この件に関しては、実行終了というよりは、「Fiber が途中状態のまま GC されたときに
ensure 節が実行される」という仕様を検査したいわけですが、確実に GC させるには
Ruby プロセスを終了させるくらいしか手がないですかね。
--
Yusuke Endoh mame@tsg.ne.jp
- Status changed from Assigned to Closed
元々の RubySpecでFiberのSpecがおちる問題はasariさんがspecを書き換えたことで解決しているので、残課題は595で取り扱うべきだと思います。重複クローズします。
- Tracker changed from Misc to Bug
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0Like0Like0Like0