diff options
author | Eric Wong <normalperson@yhbt.net> | 2010-07-05 08:07:03 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2010-07-05 08:07:03 +0000 |
commit | 70ad994ae8a854477e45c877cd0e9dda41389f86 (patch) | |
tree | 9985ad0b56eda5e72341987255640cf9e34411b3 | |
parent | 39b178cdebe275cbc8ce19cf269bea7cd15ff4ca (diff) | |
download | rainbows-70ad994ae8a854477e45c877cd0e9dda41389f86.tar.gz |
We need to load sendfile-using parts after the "sendfile" library is loaded.
-rw-r--r-- | lib/rainbows/rev/client.rb | 13 | ||||
-rw-r--r-- | lib/rainbows/rev/core.rb | 2 | ||||
-rw-r--r-- | lib/rainbows/rev/sendfile.rb | 15 |
3 files changed, 17 insertions, 13 deletions
diff --git a/lib/rainbows/rev/client.rb b/lib/rainbows/rev/client.rb index ababe50..68b3847 100644 --- a/lib/rainbows/rev/client.rb +++ b/lib/rainbows/rev/client.rb @@ -117,19 +117,6 @@ module Rainbows end while true end - if IO.method_defined?(:sendfile_nonblock) - def rev_sendfile(body) - body.pos += @_io.sendfile_nonblock(body, body.pos, 0x10000) - rescue Errno::EAGAIN - ensure - enable_write_watcher - end - else - def rev_sendfile(body) - write(body.sysread(CHUNK_SIZE)) - end - end - def on_write_complete if body = @deferred_bodies[0] # no socket or pipes, body must be a regular file to continue here diff --git a/lib/rainbows/rev/core.rb b/lib/rainbows/rev/core.rb index 7457f12..2488cf2 100644 --- a/lib/rainbows/rev/core.rb +++ b/lib/rainbows/rev/core.rb @@ -23,6 +23,8 @@ module Rainbows # given a INT, QUIT, or TERM signal) def worker_loop(worker) Rainbows::HttpResponse.setup(Rainbows::Rev::Client) + require 'rainbows/rev/sendfile' + Rainbows::Rev::Client.__send__(:include, Rainbows::Rev::Sendfile) init_worker_process(worker) mod = self.class.const_get(@use) rloop = Server.const_set(:LOOP, ::Rev::Loop.default) diff --git a/lib/rainbows/rev/sendfile.rb b/lib/rainbows/rev/sendfile.rb new file mode 100644 index 0000000..9ab28bd --- /dev/null +++ b/lib/rainbows/rev/sendfile.rb @@ -0,0 +1,15 @@ +# -*- encoding: binary -*- +module Rainbows::Rev::Sendfile + if IO.method_defined?(:sendfile_nonblock) + def rev_sendfile(body) + body.pos += @_io.sendfile_nonblock(body, body.pos, 0x10000) + rescue Errno::EAGAIN + ensure + enable_write_watcher + end + else + def rev_sendfile(body) + write(body.sysread(0x4000)) + end + end +end |