diff options
author | Eric Wong <normalperson@yhbt.net> | 2011-06-28 07:39:35 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2011-06-28 07:39:35 +0000 |
commit | 905f0ff393629ddb4d70e3dc221b016128c47415 (patch) | |
tree | dd6689cac2e79d1b76b726a5c74c268d398d46cd | |
parent | 9684ed46e78dab1ae787fe135a3cec1c4490ddd6 (diff) | |
download | rainbows-905f0ff393629ddb4d70e3dc221b016128c47415.tar.gz |
Since kgio_wait_*able in kgio 2.5 takes an optional timeout argument, we no longer have to load the extra "io/wait" module. This saves us a small amount of some memory and also removes the extra ioctl(FIONREAD) syscall IO#wait enforces. Like IO#wait in Ruby 1.9.3dev, kgio_wait_readable may use ppoll() to wait on high-numbered file descriptors as efficiently as it waits on low-numbered descriptors.
-rw-r--r-- | lib/rainbows/client.rb | 7 | ||||
-rw-r--r-- | lib/rainbows/fiber/coolio/methods.rb | 2 | ||||
-rw-r--r-- | lib/rainbows/fiber/io/methods.rb | 2 | ||||
-rw-r--r-- | rainbows.gemspec | 4 |
4 files changed, 5 insertions, 10 deletions
diff --git a/lib/rainbows/client.rb b/lib/rainbows/client.rb index cc02c0b..d8a30b2 100644 --- a/lib/rainbows/client.rb +++ b/lib/rainbows/client.rb @@ -1,6 +1,5 @@ # -*- encoding: binary -*- # :enddoc: -require "io/wait" # this class is used for most synchronous concurrency models class Rainbows::Client < Kgio::Socket @@ -11,10 +10,6 @@ class Rainbows::Client < Kgio::Socket Time.now + KEEPALIVE_TIMEOUT end - def kgio_wait_readable - wait KEEPALIVE_TIMEOUT - end - # used for reading headers (respecting keepalive_timeout) def timed_read(buf) expire = nil @@ -23,7 +18,7 @@ class Rainbows::Client < Kgio::Socket when :wait_readable return if expire && expire < Time.now expire ||= read_expire - kgio_wait_readable + kgio_wait_readable(KEEPALIVE_TIMEOUT) else return rv end diff --git a/lib/rainbows/fiber/coolio/methods.rb b/lib/rainbows/fiber/coolio/methods.rb index 2e664ff..a327148 100644 --- a/lib/rainbows/fiber/coolio/methods.rb +++ b/lib/rainbows/fiber/coolio/methods.rb @@ -28,7 +28,7 @@ module Rainbows::Fiber::Coolio::Methods @w.disable end - def kgio_wait_readable + def kgio_wait_readable(timeout = nil) @r = Watcher.new(self, :r) unless defined?(@r) @r.enable unless @r.enabled? Fiber.yield diff --git a/lib/rainbows/fiber/io/methods.rb b/lib/rainbows/fiber/io/methods.rb index 9df0f01..e490818 100644 --- a/lib/rainbows/fiber/io/methods.rb +++ b/lib/rainbows/fiber/io/methods.rb @@ -29,7 +29,7 @@ module Rainbows::Fiber::IO::Methods super end - def kgio_wait_readable + def kgio_wait_readable(timeout = nil) fd = fileno @f = Fiber.current RD[fd] = self diff --git a/rainbows.gemspec b/rainbows.gemspec index 9b5ff42..a223687 100644 --- a/rainbows.gemspec +++ b/rainbows.gemspec @@ -24,8 +24,8 @@ Gem::Specification.new do |s| # we want a newer Rack for a valid HeaderHash#each s.add_dependency(%q<rack>, ['~> 1.1']) - # kgio has some fixes for MRI 1.9.3dev that affect us - s.add_dependency(%q<kgio>, ['~> 2.4']) + # kgio 2.5 has kgio_wait_* methods that take optional timeout args + s.add_dependency(%q<kgio>, ['~> 2.5']) # we need Unicorn for the HTTP parser and process management s.add_dependency(%q<unicorn>, ["~> 4.0"]) |