Race condition in makedirs

In the ftools.rb implementation of File.makedirs (ruby 1.8.1-preview3),
there is apparently a race condition. It can result in an error like:

/usr/local/lib/ruby/1.8/ftools.rb:139:in `mkdir’: File exists -
/tmp/fsdb-test/TestConcurrency14475//Results (Errno::EEXIST)

def makedirs(*dirs)
verbose = if dirs[-1].is_a? String then false else dirs.pop end

mode = if dirs[-1].is_a? Fixnum then dirs.pop else 0755 end

 mode = 0755
 for dir in dirs
   parent = dirname(dir)
   next if parent == dir or FileTest.directory? dir
   makedirs parent unless FileTest.directory? parent
   $deferr.print "mkdir ", dir, "\n" if verbose
   if basename(dir) != ""
Dir.mkdir dir, mode
   end
 end

end

This can be avoided by simply rescuing that exception around the
Dir.mkdir call:

def makedirs(*dirs)
verbose = if dirs[-1].is_a? String then false else dirs.pop end

mode = if dirs[-1].is_a? Fixnum then dirs.pop else 0755 end

 mode = 0755
 for dir in dirs
   parent = dirname(dir)
   next if parent == dir or FileTest.directory? dir
   makedirs parent unless FileTest.directory? parent
   $deferr.print "mkdir ", dir, "\n" if verbose
   if basename(dir) != ""
     begin
  Dir.mkdir dir, mode
     rescue Errno::EEXIST
     end
   end
 end

end

(Maybe in the verbose case this exception should be logged to $deferr.)