diff options
Diffstat (limited to 'lib/yahns/stream_file.rb')
-rw-r--r-- | lib/yahns/stream_file.rb | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/lib/yahns/stream_file.rb b/lib/yahns/stream_file.rb index 19d1692..fdba5bf 100644 --- a/lib/yahns/stream_file.rb +++ b/lib/yahns/stream_file.rb @@ -11,24 +11,20 @@ class Yahns::StreamFile # :nodoc: NeedClose = Class.new(File) # :nodoc: def initialize(body, persist, offset, count) - if body.respond_to?(:to_io) - @tmpio = body.to_io + path = body.to_path + if path =~ %r{\A/dev/fd/(\d+)\z} + @tmpio = IO.for_fd($1.to_i) + @tmpio.autoclose = false else - path = body.to_path - if path =~ %r{\A/dev/fd/(\d+)\z} - @tmpio = IO.for_fd($1.to_i) - @tmpio.autoclose = false - else - retried = false - begin - @tmpio = NeedClose.open(path) - rescue Errno::EMFILE, Errno::ENFILE - raise if retried - retried = true - Thread.current[:yahns_fdmap].desperate_expire(5) - sleep(1) - retry - end + retried = false + begin + @tmpio = NeedClose.open(path) + rescue Errno::EMFILE, Errno::ENFILE + raise if retried + retried = true + Thread.current[:yahns_fdmap].desperate_expire(5) + sleep(1) + retry end end @sf_offset = offset |