From c9ca82c76f1eb0e06b0aa204a243d00f382579c5 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 5 Feb 2011 10:11:56 +0000 Subject: *epoll: consolidate re-run logic There's a lot of code duplication here :< --- lib/rainbows/epoll.rb | 7 +++++++ lib/rainbows/epoll/client.rb | 2 +- lib/rainbows/epoll/server.rb | 5 +---- lib/rainbows/xepoll/client.rb | 1 + 4 files changed, 10 insertions(+), 5 deletions(-) (limited to 'lib') diff --git a/lib/rainbows/epoll.rb b/lib/rainbows/epoll.rb index c8c013e..b567142 100644 --- a/lib/rainbows/epoll.rb +++ b/lib/rainbows/epoll.rb @@ -7,11 +7,18 @@ require 'sendfile' # and optimized for throughput at the expense of fairness module Rainbows::Epoll include Rainbows::Base + ReRun = [] autoload :Server, 'rainbows/epoll/server' autoload :Client, 'rainbows/epoll/client' autoload :ResponsePipe, 'rainbows/epoll/response_pipe' autoload :ResponseChunkPipe, 'rainbows/epoll/response_chunk_pipe' + def self.rerun + while obj = ReRun.shift + obj.epoll_run + end + end + def init_worker_process(worker) super Rainbows::Epoll.const_set :EP, SleepyPenguin::Epoll.new diff --git a/lib/rainbows/epoll/client.rb b/lib/rainbows/epoll/client.rb index a8eacab..a243d5d 100644 --- a/lib/rainbows/epoll/client.rb +++ b/lib/rainbows/epoll/client.rb @@ -100,7 +100,7 @@ module Rainbows::Epoll::Client end def want_more - Server::ReRun << self + Rainbows::Epoll::ReRun << self end def on_deferred_write_complete diff --git a/lib/rainbows/epoll/server.rb b/lib/rainbows/epoll/server.rb index 820a6da..a8be3e2 100644 --- a/lib/rainbows/epoll/server.rb +++ b/lib/rainbows/epoll/server.rb @@ -6,16 +6,13 @@ module Rainbows::Epoll::Server MAX = Rainbows.server.worker_connections THRESH = MAX - 1 LISTENERS = Rainbows::HttpServer::LISTENERS - ReRun = [] EP = Rainbows::Epoll::EP def self.run LISTENERS.each { |sock| EP.add(sock.extend(self), IN) } begin EP.wait(nil, 1000) { |_, obj| obj.epoll_run } - while obj = ReRun.shift - obj.epoll_run - end + Rainbows::Epoll.rerun Rainbows::Epoll::Client.expire rescue Errno::EINTR rescue => e diff --git a/lib/rainbows/xepoll/client.rb b/lib/rainbows/xepoll/client.rb index fa5999b..2db684e 100644 --- a/lib/rainbows/xepoll/client.rb +++ b/lib/rainbows/xepoll/client.rb @@ -27,6 +27,7 @@ module Rainbows::XEpoll::Client THREADS.each { |t| t.run } begin EP.wait(nil, @timeout) { |flags, obj| obj.epoll_run } + Rainbows::Epoll.rerun Rainbows::Epoll::Client.expire rescue Errno::EINTR rescue => e -- cgit v1.2.3-24-ge0c7