about summary refs log tree commit homepage
path: root/lib/rainbows/process_client.rb
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-06-28 08:17:01 +0000
committerEric Wong <normalperson@yhbt.net>2011-06-28 08:17:01 +0000
commit65f251070ce9b61a9049cb413fccffdfa11e7a70 (patch)
tree6cf5c9d0f63f84688e0f05f9ac88de339ce157b1 /lib/rainbows/process_client.rb
parent905f0ff393629ddb4d70e3dc221b016128c47415 (diff)
downloadrainbows-65f251070ce9b61a9049cb413fccffdfa11e7a70.tar.gz
This fixes up breakage introduced in commit
905f0ff393629ddb4d70e3dc221b016128c47415 to switch to
kgio for timed, synchronous waiting.
Diffstat (limited to 'lib/rainbows/process_client.rb')
-rw-r--r--lib/rainbows/process_client.rb21
1 files changed, 20 insertions, 1 deletions
diff --git a/lib/rainbows/process_client.rb b/lib/rainbows/process_client.rb
index 53b4f53..b685001 100644
--- a/lib/rainbows/process_client.rb
+++ b/lib/rainbows/process_client.rb
@@ -7,7 +7,26 @@ module Rainbows::ProcessClient
   NULL_IO = Unicorn::HttpRequest::NULL_IO
   RACK_INPUT = Unicorn::HttpRequest::RACK_INPUT
   IC = Unicorn::HttpRequest.input_class
-  Rainbows.config!(self, :client_header_buffer_size)
+  Rainbows.config!(self, :client_header_buffer_size, :keepalive_timeout)
+
+  def read_expire
+    Time.now + KEEPALIVE_TIMEOUT
+  end
+
+  # used for reading headers (respecting keepalive_timeout)
+  def timed_read(buf)
+    expire = nil
+    begin
+      case rv = kgio_tryread(CLIENT_HEADER_BUFFER_SIZE, buf)
+      when :wait_readable
+        return if expire && expire < Time.now
+        expire ||= read_expire
+        kgio_wait_readable(KEEPALIVE_TIMEOUT)
+      else
+        return rv
+      end
+    end while true
+  end
 
   def process_loop
     @hp = hp = Rainbows::HttpParser.new