diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-08-28 18:11:37 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-08-28 18:11:37 +0000 |
commit | c2a81f31efb709d34141aa2bdbf530969b3c012c (patch) | |
tree | 9c47c204be4887774b1f0d72f1985241a9a6b001 | |
parent | c6c6ab873e8eb3cb87b593f99ea78c50e97442dc (diff) |
* lib/tempfile.rb (Tempfile#make_tmpname): removed thread race
condition.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24697 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rwxr-xr-x | lib/tempfile.rb | 11 |
2 files changed, 9 insertions, 7 deletions
@@ -1,3 +1,8 @@ +Sat Aug 29 03:11:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * lib/tempfile.rb (Tempfile#make_tmpname): removed thread race + condition. + Fri Aug 28 20:29:34 2009 Akinori MUSHA <knu@iDaemons.org> * lib/tempfile.rb (Tempfile#callback): Debug information should be diff --git a/lib/tempfile.rb b/lib/tempfile.rb index 4061b170a8..46164e8b99 100755 --- a/lib/tempfile.rb +++ b/lib/tempfile.rb @@ -125,12 +125,8 @@ class Tempfile < DelegateClass(File) # # === Exceptions # - # Under rare circumstances, this constructor can raise an instance of - # Tempfile::CreationError. This could happen if a large number - # of threads or processes are simultaneously trying to create temp files - # and stepping on each others' toes. If Tempfile.new cannot find - # a unique filename within a limited number of tries, then it will raise - # this exception. + # If Tempfile.new cannot find a unique filename within a limited + # number of tries, then it will raise an exception. def initialize(basename, *rest) # I wish keyword argument settled soon. if opts = Hash.try_convert(rest[-1]) @@ -191,7 +187,8 @@ class Tempfile < DelegateClass(File) end t = Time.now.strftime("%Y%m%d") - path = "#{prefix}#{t}-#{$$}-#{rand(0x100000000).to_s(36)}-#{n}#{suffix}" + th = Thread.current.object_id + path = "#{prefix}#{t}-#{$$}-#{th.to_s(36)}-#{rand(0x100000000).to_s(36)}-#{n}#{suffix}" end private :make_tmpname |