diff options
author | Eric Wong <normalperson@yhbt.net> | 2011-02-04 18:58:26 -0800 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2011-02-04 18:58:26 -0800 |
commit | 8e2e8adda8adbadee8ab31cde700b7e486b1154c (patch) | |
tree | b4fadc909c9636486ee8e1bebd735786063b9af7 /lib/rainbows/xaccept_epoll/client.rb | |
parent | 0f4f015737297ac5245d0be9ee83553770ade0a9 (diff) | |
download | rainbows-8e2e8adda8adbadee8ab31cde700b7e486b1154c.tar.gz |
It's too long especially since XEpollThreadPool is planned :>
Diffstat (limited to 'lib/rainbows/xaccept_epoll/client.rb')
-rw-r--r-- | lib/rainbows/xaccept_epoll/client.rb | 60 |
1 files changed, 0 insertions, 60 deletions
diff --git a/lib/rainbows/xaccept_epoll/client.rb b/lib/rainbows/xaccept_epoll/client.rb deleted file mode 100644 index f0fecd0..0000000 --- a/lib/rainbows/xaccept_epoll/client.rb +++ /dev/null @@ -1,60 +0,0 @@ -# -*- encoding: binary -*- -# :enddoc: - -module Rainbows::XAcceptEpoll::Client - include Rainbows::Epoll::Client - MAX = Rainbows.server.worker_connections - THRESH = MAX - 1 - EP = Rainbows::Epoll::EP - N = Raindrops.new(1) - @timeout = Rainbows.server.timeout / 2.0 - THREADS = Rainbows::HttpServer::LISTENERS.map do |sock| - Thread.new(sock) do |sock| - sleep - begin - if io = sock.kgio_accept - N.incr(0, 1) - io.epoll_once - end - sleep while N[0] >= MAX - rescue => e - Rainbows::Error.listen_loop(e) - end while Rainbows.alive - end - end - - def self.run - THREADS.each { |t| t.run } - begin - EP.wait(nil, @timeout) { |flags, obj| obj.epoll_run } - Rainbows::Epoll::Client.expire - rescue Errno::EINTR - rescue => e - Rainbows::Error.listen_loop(e) - end while Rainbows.tick - - THREADS.delete_if do |thr| - Rainbows.tick - begin - thr.run - thr.join(0.01) - rescue - true - end - end until THREADS.empty? - end - - # only call this once - def epoll_once - @wr_queue = [] # may contain String, ResponsePipe, and StreamFile objects - post_init - EP.set(self, IN) # wake up the main thread - rescue => e - Rainbows::Error.write(self, e) - end - - def on_close - KATO.delete(self) - N.decr(0, 1) == THRESH and THREADS.each { |t| t.run } - end -end |