diff options
author | Eric Wong <normalperson@yhbt.net> | 2009-07-19 16:38:16 -0700 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2009-07-19 16:50:36 -0700 |
commit | 97e469fc3afb751618b8b9a7b364cb447aaf90dd (patch) | |
tree | 1c3fdba70ccd2f88e6471441a4c66335189eafae /lib/unicorn/tee_input.rb | |
parent | 7db0e317dee3514fd80cc0a97a9b78a7a893ec22 (diff) | |
download | unicorn-97e469fc3afb751618b8b9a7b364cb447aaf90dd.tar.gz |
With the 1.9.2preview1 release (and presumably 1.9.1 p243), the Ruby core team has decided that bending over backwards to support crippled operating/file systems was necessary and that files must be closed before unlinking. Regardless, this is more efficient than using Tempfile because: 1) no delegation is necessary, this is a real File object 2) no mkdir is necessary for locking, we can trust O_EXCL to work properly without unnecessary FS activity 3) no finalizer is needed to unlink the file, we unlink it as soon as possible after creation.
Diffstat (limited to 'lib/unicorn/tee_input.rb')
-rw-r--r-- | lib/unicorn/tee_input.rb | 9 |
1 files changed, 2 insertions, 7 deletions
diff --git a/lib/unicorn/tee_input.rb b/lib/unicorn/tee_input.rb index 1bcbf1d..bbc496b 100644 --- a/lib/unicorn/tee_input.rb +++ b/lib/unicorn/tee_input.rb @@ -1,10 +1,8 @@ # Copyright (c) 2009 Eric Wong # You can redistribute it and/or modify it under the same terms as Ruby. -require 'tempfile' - # acts like tee(1) on an input input to provide a input-like stream -# while providing rewindable semantics through a Tempfile/StringIO +# while providing rewindable semantics through a File/StringIO # backing store. On the first pass, the input is only read on demand # so your Rack application can use input notification (upload progress # and like). This should fully conform to the Rack::InputWrapper @@ -16,10 +14,7 @@ module Unicorn class TeeInput def initialize(input, size, body) - @tmp = Tempfile.new(nil) - @tmp.unlink - @tmp.binmode - @tmp.sync = true + @tmp = Unicorn::Util.tmpio if body @tmp.write(body) |