diff options
author | Eric Wong <bofh@yhbt.net> | 2023-09-05 06:43:20 +0000 |
---|---|---|
committer | Eric Wong <bofh@yhbt.net> | 2024-01-15 01:45:45 +0000 |
commit | b652fa51c1342496bdcdecca8e567f1fb46c41c9 (patch) | |
tree | b10a1dd61bdf0c4b253600ab38dbfbc311da93ed /lib/unicorn/oob_gc.rb | |
parent | 31d0539878b0e2247a4f98bc0241e05d4738e500 (diff) | |
download | unicorn-b652fa51c1342496bdcdecca8e567f1fb46c41c9.tar.gz |
kgio is an extra download and shared object which costs users bandwidth, disk space, startup time and memory. Ruby 2.3+ provides `Socket#accept_nonblock(exception: false)' support in addition to `exception: false' support in IO#*_nonblock methods from Ruby 2.1. We no longer distinguish between TCPServer and UNIXServer as separate classes internally; instead favoring the `Socket' class of Ruby for both. This allows us to use `Socket#accept_nonblock' and get a populated `Addrinfo' object off accept4(2)/accept(2) without resorting to a getpeername(2) syscall (kgio avoided getpeername(2) in the same way). The downside is there's more Ruby-level argument passing and stack usage on our end with HttpRequest#read_headers (formerly HttpRequest#read). I chose this tradeoff since advancements in Ruby itself can theoretically mitigate the cost of argument passing, while syscalls are a high fixed cost given modern CPU vulnerability mitigations. Note: no benchmarks have been run since I don't have a suitable system.
Diffstat (limited to 'lib/unicorn/oob_gc.rb')
-rw-r--r-- | lib/unicorn/oob_gc.rb | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/unicorn/oob_gc.rb b/lib/unicorn/oob_gc.rb index 91a8e51..db9f2cb 100644 --- a/lib/unicorn/oob_gc.rb +++ b/lib/unicorn/oob_gc.rb @@ -65,8 +65,8 @@ module Unicorn::OobGC end #:stopdoc: - def process_client(client) - super(client) # Unicorn::HttpServer#process_client + def process_client(*args) + super(*args) # Unicorn::HttpServer#process_client env = instance_variable_get(:@request).env if OOBGC_PATH =~ env['PATH_INFO'] && ((@@nr -= 1) <= 0) @@nr = OOBGC_INTERVAL |