Forum: Ruby-dev [ruby-trunk - Bug #6751][Assigned] remove tempfiles early.

Posted by akr (Akira Tanaka) (Guest)
on 2012-07-18 13:38
(Received via mailing list)
Issue #6751 has been reported by akr (Akira Tanaka).

----------------------------------------
Bug #6751: remove tempfiles early.
https://bugs.ruby-lang.org/issues/6751

Author: akr (Akira Tanaka)
Status: Assigned
Priority: Normal
Assignee: xibbar (Takeyuki Fujioka)
Category: lib
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-07-18 trunk 36442) [x86_64-linux]


cgi.rb で、テンポラリファイル (Tempfile) をなるべく早く消すようにすると良いと
思うのですがいかがでしょうか。

いずれ GC で消されるはずなので、Bug というほどの話ではありませんが。

./ruby test/runner.rb test/cgi の各テストでテンポラリファイルが残らないように
したものを cgi-tempfile.patch として作ってみました。

* read_multipart で params に入れないものはそこで消す
* read_multipart で例外が起きたら、内部で作ったものはすべて消す
* テスト内で作ったものはテストが終わる前に消す

なお、テスト毎に残っていないか確認するのは以下のようにして行いました。

Index: lib/minitest/unit.rb
===================================================================
--- lib/minitest/unit.rb  (revision 36442)
+++ lib/minitest/unit.rb  (working copy)
@@ -1082,6 +1082,10 @@ module MiniTest
           end
           trap 'INFO', 'DEFAULT' if SUPPORTS_INFO_SIGNAL
         end
+        if !(live_tempfiles = 
ObjectSpace.each_object(Tempfile).find_all {|t| t.path }).empty?
+          puts nil, "after #{self.__name__}", *live_tempfiles.map {|t| 
t.inspect }
+          live_tempfiles.each {|t| t.unlink }
+        end
         result
       end

どうでしょうか。
Posted by ko1 (Koichi Sasada) (Guest)
on 2013-02-17 11:10
(Received via mailing list)
Issue #6751 has been updated by ko1 (Koichi Sasada).

Target version changed from 2.0.0 to 2.1.0


----------------------------------------
Bug #6751: remove tempfiles early.
https://bugs.ruby-lang.org/issues/6751#change-36421

Author: akr (Akira Tanaka)
Status: Assigned
Priority: Normal
Assignee: xibbar (Takeyuki Fujioka)
Category: lib
Target version: 2.1.0
ruby -v: ruby 2.0.0dev (2012-07-18 trunk 36442) [x86_64-linux]


cgi.rb で、テンポラリファイル (Tempfile) をなるべく早く消すようにすると良いと
思うのですがいかがでしょうか。

いずれ GC で消されるはずなので、Bug というほどの話ではありませんが。

./ruby test/runner.rb test/cgi の各テストでテンポラリファイルが残らないように
したものを cgi-tempfile.patch として作ってみました。

* read_multipart で params に入れないものはそこで消す
* read_multipart で例外が起きたら、内部で作ったものはすべて消す
* テスト内で作ったものはテストが終わる前に消す

なお、テスト毎に残っていないか確認するのは以下のようにして行いました。

Index: lib/minitest/unit.rb
===================================================================
--- lib/minitest/unit.rb  (revision 36442)
+++ lib/minitest/unit.rb  (working copy)
@@ -1082,6 +1082,10 @@ module MiniTest
           end
           trap 'INFO', 'DEFAULT' if SUPPORTS_INFO_SIGNAL
         end
+        if !(live_tempfiles = 
ObjectSpace.each_object(Tempfile).find_all {|t| t.path }).empty?
+          puts nil, "after #{self.__name__}", *live_tempfiles.map {|t| 
t.inspect }
+          live_tempfiles.each {|t| t.unlink }
+        end
         result
       end

どうでしょうか。
Posted by Tanaka Akira (Guest)
on 2013-02-17 13:07
(Received via mailing list)
2013$BG/(B2$B7n(B17$BF|(B 19:10 ko1 (Koichi Sasada) 
<redmine@ruby-lang.org>:
>
> Issue #6751 has been updated by ko1 (Koichi Sasada).
>
> Target version changed from 2.0.0 to 2.1.0

r37471 $B$G%Q%C%A$,Ev$?$C$F$$$k$h$&$J5$$,$7$^$9!#(B
Posted by xibbar (Takeyuki Fujioka) (Guest)
on 2013-02-17 14:52
(Received via mailing list)
Issue #6751 has been updated by xibbar (Takeyuki Fujioka).

Status changed from Assigned to Closed

チケットの更新し忘れでした。
akrさんの言う通り、パッチはすでに当たっています。

----------------------------------------
Bug #6751: remove tempfiles early.
https://bugs.ruby-lang.org/issues/6751#change-36440

Author: akr (Akira Tanaka)
Status: Closed
Priority: Normal
Assignee: xibbar (Takeyuki Fujioka)
Category: lib
Target version: 2.1.0
ruby -v: ruby 2.0.0dev (2012-07-18 trunk 36442) [x86_64-linux]


cgi.rb で、テンポラリファイル (Tempfile) をなるべく早く消すようにすると良いと
思うのですがいかがでしょうか。

いずれ GC で消されるはずなので、Bug というほどの話ではありませんが。

./ruby test/runner.rb test/cgi の各テストでテンポラリファイルが残らないように
したものを cgi-tempfile.patch として作ってみました。

* read_multipart で params に入れないものはそこで消す
* read_multipart で例外が起きたら、内部で作ったものはすべて消す
* テスト内で作ったものはテストが終わる前に消す

なお、テスト毎に残っていないか確認するのは以下のようにして行いました。

Index: lib/minitest/unit.rb
===================================================================
--- lib/minitest/unit.rb  (revision 36442)
+++ lib/minitest/unit.rb  (working copy)
@@ -1082,6 +1082,10 @@ module MiniTest
           end
           trap 'INFO', 'DEFAULT' if SUPPORTS_INFO_SIGNAL
         end
+        if !(live_tempfiles = 
ObjectSpace.each_object(Tempfile).find_all {|t| t.path }).empty?
+          puts nil, "after #{self.__name__}", *live_tempfiles.map {|t| 
t.inspect }
+          live_tempfiles.each {|t| t.unlink }
+        end
         result
       end

どうでしょうか。
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.