diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/unicorn.rb | 18 | ||||
-rw-r--r-- | lib/unicorn/http_request.rb | 1 | ||||
-rw-r--r-- | lib/unicorn/launcher.rb | 2 |
3 files changed, 17 insertions, 4 deletions
diff --git a/lib/unicorn.rb b/lib/unicorn.rb index 85e4df1..b6dae36 100644 --- a/lib/unicorn.rb +++ b/lib/unicorn.rb @@ -2,6 +2,7 @@ require 'etc' require 'stringio' require 'kgio' +require 'raindrops' require 'io/wait' begin @@ -113,9 +114,22 @@ module Unicorn exc.backtrace.each { |line| logger.error(line) } end - # remove this when we only support Ruby >= 2.0 + F_SETPIPE_SZ = 1031 if RUBY_PLATFORM =~ /linux/ + def self.pipe # :nodoc: - Kgio::Pipe.new.each { |io| io.close_on_exec = true } + Kgio::Pipe.new.each do |io| + io.close_on_exec = true # remove this when we only support Ruby >= 2.0 + + # shrink pipes to minimize impact on /proc/sys/fs/pipe-user-pages-soft + # limits. + if defined?(F_SETPIPE_SZ) + begin + io.fcntl(F_SETPIPE_SZ, Raindrops::PAGE_SIZE) + rescue Errno::EINVAL + # old kernel + end + end + end end # :startdoc: end diff --git a/lib/unicorn/http_request.rb b/lib/unicorn/http_request.rb index d713b19..8bb884b 100644 --- a/lib/unicorn/http_request.rb +++ b/lib/unicorn/http_request.rb @@ -2,7 +2,6 @@ # :enddoc: # no stable API here require 'unicorn_http' -require 'raindrops' # TODO: remove redundant names Unicorn.const_set(:HttpRequest, Unicorn::HttpParser) diff --git a/lib/unicorn/launcher.rb b/lib/unicorn/launcher.rb index 5eafe5b..78e8f39 100644 --- a/lib/unicorn/launcher.rb +++ b/lib/unicorn/launcher.rb @@ -31,7 +31,7 @@ module Unicorn::Launcher # \_ parent - exits immediately ASAP # \_ unicorn master - writes to pipe when ready - rd, wr = IO.pipe + rd, wr = Unicorn.pipe grandparent = $$ if fork wr.close # grandparent does not write |