From c2a81f31efb709d34141aa2bdbf530969b3c012c Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 28 Aug 2009 18:11:37 +0000 Subject: * 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 --- ChangeLog | 5 +++++ lib/tempfile.rb | 11 ++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index c6c370be82..5eef2f1cc7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sat Aug 29 03:11:29 2009 Nobuyoshi Nakada + + * lib/tempfile.rb (Tempfile#make_tmpname): removed thread race + condition. + Fri Aug 28 20:29:34 2009 Akinori MUSHA * 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 -- cgit v1.2.3