class PhusionPassenger::Utils::TmpIO

to understand, and slightly faster.
well with unlinked files. This one is much shorter, easier
some versions of Ruby had a broken Tempfile which didn’t work

def self.new(namespace, options = nil)

buffering is disabled
immediately, switched to binary mode, and userspace output
creates and returns a new File object. The File is unlinked
def self.new(namespace, options = nil)
  if options
    mode   = options[:mode] || RDWR
    binary = options.fetch(:binary, true)
    suffix = options[:suffix]
    unlink_immediately = options.fetch(:unlink_immediately, true)
  else
    mode   = RDWR
    binary = true
    suffix = nil
    unlink_immediately = true
  end
  fp = begin
    super("#{Dir::tmpdir}/#{namespace}-#{rand(0x100000000).to_s(36)}#{suffix}", mode | CREAT | EXCL, 0600)
  rescue Errno::EEXIST
    retry
  end
  unlink(fp.path) if unlink_immediately
  fp.binmode if binary
  fp.sync = true
  fp
end

def size

for easier env["rack.input"] compatibility with Rack <= 1.1
def size
  stat.size
end unless File.method_defined?(:size)