diff options
author | Eric Wong <e@80x24.org> | 2017-03-14 19:18:55 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2017-03-14 19:18:55 +0000 |
commit | 20c66dbf1ebd0ca993e7a79c9d0d833d747df358 (patch) | |
tree | 73cfb72ba379293c29b80d0cf268aa462a06f9ee | |
parent | 873218e317773462be2a72556d26dc4a723cc7be (diff) | |
download | unicorn-20c66dbf1ebd0ca993e7a79c9d0d833d747df358.tar.gz |
Unlike constants and instance variables, class variable access is not optimized in the mainline Ruby VM. Use a constant instead, to take advantage of inline constant caching. This further reduces runtime instruction size by avoiding a branch by allocating the Raindrops::TCP_Info object up front. This reduces the method size by roughly 300 bytes on 64-bit.
-rw-r--r-- | lib/unicorn/http_request.rb | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/unicorn/http_request.rb b/lib/unicorn/http_request.rb index c08097c..9010007 100644 --- a/lib/unicorn/http_request.rb +++ b/lib/unicorn/http_request.rb @@ -106,12 +106,13 @@ class Unicorn::HttpParser end if defined?(Raindrops::TCP_Info) + TCPI = Raindrops::TCP_Info.allocate + def check_client_connection(socket) # :nodoc: if Unicorn::TCPClient === socket - @@tcp_info ||= Raindrops::TCP_Info.new(socket) - @@tcp_info.get!(socket) + # Raindrops::TCP_Info#get!, #state (reads struct tcp_info#tcpi_state) raise Errno::EPIPE, "client closed connection".freeze, - EMPTY_ARRAY if closed_state?(@@tcp_info.state) + EMPTY_ARRAY if closed_state?(TCPI.get!(socket).state) else write_http_header(socket) end |